2012-12-18 81 views
0

我应该使用由第三方公开的SOAP服务。我有两个基本问题w.r.t:从WSDL创建客户端jar

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的指针都会很棒。

回答

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内部或外部的可配置属性值来维护它。

希望这会有所帮助。

+0

感谢Sarvana,但创建客户端jar本身

在下面的例子中,你会看到前缀由XMLNS(XML命名空间)属性定义由于WSDL由第三方公开并且具有基本身份验证,因此是一个问题。在使用wsdl2Java时,我得到上述异常,因为我不知道在哪里设置ID/PWD,以便wsdl2Java工具清除身份验证。我希望我明确提出了我的问题。 在此先感谢! – user1912337

+0

由于基本身份验证,它看起来不是例外。另外wsdl2java工具不需要被设置凭据。只有在您使用客户端代理调用端点时才可能进行身份验证。看起来WSDL没有以正确的方式保存。或者wsdl本身的语法有一些问题。 –

0

在您的WSDL文件,勾选 “< ”WSDL:定义“>” 标记为的xmlns:wsdl特性,如果缺少它会抛出错误:

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

<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