从WSDL创建客户端jar

时间:2012-12-18 09:25:05

标签: axis2 wsdl2java

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

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的任何指示都会很棒。

2 个答案:

答案 0 :(得分:0)

对于WSDL中的每个更改,您都应该重新部署client.jar。

我建议你这样做。

  1. 创建一个jar项目以从wsdl生成类。例如,检查cxf-codegen-plugin wsdl2java。
  2. 创建另一个引用上一个项目的jar项目(Client.jar)。
  3. 因此,无论何时WSDL中的更改,您都应该修改项目中的WSDL URL,然后构建两个jar项目来创建Client.jar。更好的做法是使用WSDL URL作为Client.jar内部或外部的可配置属性值来维护它。

    希望这有帮助。

答案 1 :(得分:0)

在您的wsdl文件中,选中“&lt;”wsdl:definitions“&gt;” 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