【问题标题】:Creating client jar from a WSDL从 WSDL 创建客户端 jar
【发布时间】:2012-12-18 09:25:05
【问题描述】:

我应该使用第三方公开的 SOAP 服务。我有两个基本问题:

第一季度。 WSDL 需要基本身份验证才能通过浏览器进行访问。现在,当我尝试使用wsgen/WSDL2JAVA/ 使用Eclipse Webservice 客户端创建客户端jar 时,我得到HTTP 401 unauthorised。如果我在本地下载并保存 WSDL,然后使用axis's WSDL2JAVA,我会得到


Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: Error parsing WSDL
    at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:178)
    at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
    at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
Caused by: javax.wsdl.WSDLException: WSDLException: faultCode=PARSER_ERROR: Problem parsing 'file:/C:/TEST/TOOLS/Authentication.wsdl'.: org.xml.sax.SAXParseException: The prefix "wsdl" for element "wsdl:definitions" is not bound.
    at com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(Unknown Source)
    at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.readInTheWSDLFile(CodeGenerationEngine.java:320)
    at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.<init>(CodeGenerationEngine.java:133)
    ... 2 more
Caused by: org.xml.sax.SAXParseException: The prefix "wsdl" for element "wsdl:definitions" is not bound.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:249)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)
    ... 7 more

第二季度。我们如何处理频繁变化的 WSDL,是否每次都生成客户端 jar 并重新部署应用程序?

任何能帮助我创建client.jar 的建议都会很棒。

【问题讨论】:

    标签: axis2 wsdl2java


    【解决方案1】:

    您绝对应该为 WSDL 中的每次更改重新部署您的 client.jar。

    我建议你这样做。

    1. 创建一个 jar 项目以从 wsdl 生成类。以 cxf-codegen-plugin wsdl2java 为例。
    2. 创建另一个引用前一个项目的 jar 项目 (Client.jar)。

    因此,每当 WSDL 发生变化时,您都应该修改项目中的 WSDL URL,然后构建两个 jar 项目以创建 Client.jar。更好的做法是使用 WSDL URL 作为 Client.jar 内部或外部的可配置属性值来维护它。

    希望这会有所帮助。

    【讨论】:

    • 感谢 Sarvana,但是创建客户端 jar 本身是一个问题,因为 WSDL 由第三方公开并且具有基本身份验证。在使用 wsdl2Java 时,我得到了上述异常,因为我不知道在哪里设置 ID/PWD 以便 wsdl2Java 工具清除身份验证。我希望我把我的问题说清楚了。提前致谢!!!
    • 由于基本身份验证,这似乎不是异常。也不需要设置 wsdl2java 工具的凭据。仅当您使用客户端代理调用端点时,才可能对其进行身份验证。似乎 WSDL 没有以正确的方式保存。或者 wsdl 本身的语法有问题。
    【解决方案2】:

    在您的 wsdl 文件中,检查 xmlns:wsdl 属性的“”标签,如果缺少它会抛出错误:

    “org.xml.sax.SAXParseException:元素“wsdl:definitions”的前缀“wsdl”未绑定”在您发布的错误摘要的第 5 行找到。

    在下面的示例中,您将看到由 xmlns(xml 命名空间)属性定义的前缀:

    <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:ns1="http://org.apache.axis2/xsd" 
    xmlns:ns="http://pojo.service.quickstart.samples" 
    xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" 
    xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
    targetNamespace="http://pojo.service.quickstart.samples">
    

    在这里查看 xml 命名空间的工作原理: http://www.w3schools.com/xml/xml_namespaces.asp

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-27
      • 2013-08-20
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多