0

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

Q1。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

Q2。我们如何处理频繁更改的 WSDL,我们是否每次都生成客户端 jar 并重新部署应用程序?

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

4

2 回答 2

0

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

我建议你这样做。

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

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

希望这可以帮助。

于 2012-12-24T20:45:08.093 回答
0

在您的 wsdl 文件中,检查 xmlns:wsdl 属性的 "<"wsdl:definitions">" 标记,如果缺少它会抛出错误:

“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

于 2014-01-16T19:55:51.940 回答