【问题标题】:How to parse WSDL in Java?如何在 Java 中解析 WSDL?
【发布时间】:2011-01-30 13:04:42
【问题描述】:

我需要 WSDL 解析器来获取消息、端口类型、操作、绑定、服务…… 我希望一些解析器已经存在。那么,有什么指导方针吗?

【问题讨论】:

    标签: java web-services wsdl


    【解决方案1】:

    希望此链接对您选择 WSDL 解析器有用,Parse WSDL Effectively(查看此链接的存档:Web Archive)。

    我尝试过使用Apache WodenWSDL4JMembrane SOA。 Apache Woden 或 Membrane SOA 就可以了。

    【讨论】:

    • “有效解析 WSDL”链接现已失效。 Apache Woden 仅支持 WSDL 2.0,不支持 WSDL 1.1。
    【解决方案2】:

    有几个 Web 服务堆栈可用。

    查看 Metro 堆栈。开源,可直接在 Java 6 中使用。

    【讨论】:

    • 我必须制作基于 WSDL 的动态服务调用程序。一些方向如何用Metro做到这一点?
    • 好吧,我需要基于 WSDL 制作动态表单(服务调用程序)。想象一下,您收到 WSDL 并且应该从中生成表单(输入字段),并且还可以调用该操作。我只有 WSDL 的存储库。它应该是足够动态的,它可以适用于任何 WSDL。我希望我说得够清楚。
    • 你问的不是和stackoverflow.com/questions/2491598/…一样的问题吗?
    • 我使用 Eclipse JEE 中的 Web Service Explorer 来处理未知的 WSDL。只是使用它是一种选择吗? “任何 WSDL”都需要你付出相当多的努力才能实现。
    【解决方案3】:
    f wsdl = '''
    <definitions name="AgencyManagementService"
        xmlns:ns1="http://www.example.org/NS1"
        xmlns:ns2="http://www.example.org/NS2">
        <ns1:message name="SomeRequest">
            <ns1:part name="parameters" element="SomeReq" />
        </ns1:message>
        <ns2:message name="SomeRequest">
            <ns2:part name="parameters" element="SomeReq" />
        </ns2:message>
    </definitions>
    '''
    
    def xml = new XmlSlurper().parseText(wsdl).declareNamespace(ns1: 'http://www.example.org/NS1', ns2: 'http://www.example.org/NS2')
    println xml.'ns1:message'.'ns1:part'.size()
    println xml.'ns2:message'.'ns2:part'.size()
    

    希望这会有所帮助。可以从任何其他 Java 类调用 Groovy 类。将所有 XML 劳动力转移到 Groovy :)

    【讨论】:

      【解决方案4】:

      http://docs.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html 上查看wsimport 工具文档。它是一个标准的 JDK 工具,可以生成基于 JAXB 的 Java 工件以与 Web 服务交互。

      【讨论】:

        【解决方案5】:

        您可以使用membrane-soa 来解析wsdl 文件。从 http://mvnrepository.com/artifact/com.predic8/soa-model-core 添加依赖。

        您可以在http://membrane-soa.org/soa-model/ 找到文档。

        【讨论】:

          【解决方案6】:

          使用http://sourceforge.net/projects/wsdl4j/

          public Definition readWSDLFile(String location) throws  WSDLException {
              WSDLReader reader = getWsdlFactoryInstance().newWSDLReader();
              reader.setFeature("javax.wsdl.importDocuments", true);
              return reader.readWSDL(location);
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-09-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-04-01
            • 2014-11-16
            相关资源
            最近更新 更多