【问题标题】:wsdl2java error: "Fail to create wsdl definition" while generating java codewsdl2java 错误:生成 java 代码时“创建 wsdl 定义失败”
【发布时间】:2015-01-23 08:54:55
【问题描述】:

我正在尝试使用用于 wsdl 的 apache-cxf wsdl2java 工具生成 java 服务代码: https://raw.githubusercontent.com/mpromonet/spring-onvif/master/src/main/resources/wsdl/remotediscovery.wsdl

MBA-Anton:bin asmirnov$ ./wsdl2java “https://raw.githubusercontent.com/mpromonet/spring-onvif/master/src/main/resources/wsdl/remotediscovery.wsdl” 25.11.2014 16:16:49 org.apache.cxf.configuration.jsse.SSLUtils getDefaultKeyStoreManagers 警告:默认密钥管理器不能 初始化:/Users/asmirnov/.keystore(没有这样的文件或目录) [致命错误]寻址:2:2:文档中的标记如下 根元素必须格式正确。

WSDLToJava 错误:org.apache.cxf.wsdl11.WSDLRuntimeException:失败 创建 wsdl 定义 https://raw.githubusercontent.com/mpromonet/spring-onvif/master/src/main/resources/wsdl/remotediscovery.wsdl: WSDLException(在 /wsdl:definitions/wsdl:types/xs:schema/xs:schema): faultCode=PARSER_ERROR: 解析问题 'http://schemas.xmlsoap.org/ws/2004/08/addressing'.: org.xml.sax.SAXParseException:文档中的标记如下 根元素必须格式正确。

为什么它试图创建 wsdl 定义而不是生成 java 代码?我该如何解决?

详细日志:

MBA-Anton:bin asmirnov$ ./wsdl2java -V “https://raw.githubusercontent.com/mpromonet/spring-onvif/master/src/main/resources/wsdl/remotediscovery.wsdl” 正在加载前端 jaxws ... 正在加载 DataBinding jaxb ... wsdl2java -V https://raw.githubusercontent.com/mpromonet/spring-onvif/master/src/main/resources/wsdl/remotediscovery.wsdl wsdl2java - Apache CXF 2.7.13

25.11.2014 16:18:39 org.apache.cxf.configuration.jsse.SSLUtils getDefaultKeyStoreManagers 警告:默认密钥管理器不能 初始化:/Users/asmirnov/.keystore(没有这样的文件或目录) [致命错误]寻址:2:2:文档中的标记如下 根元素必须格式正确。

WSDLToJava 错误:org.apache.cxf.wsdl11.WSDLRuntimeException:失败 创建 wsdl 定义 https://raw.githubusercontent.com/mpromonet/spring-onvif/master/src/main/resources/wsdl/remotediscovery.wsdl: WSDLException(在 /wsdl:definitions/wsdl:types/xs:schema/xs:schema): faultCode=PARSER_ERROR: 解析问题 'http://schemas.xmlsoap.org/ws/2004/08/addressing'.: org.xml.sax.SAXParseException:文档中的标记如下 根元素必须格式正确。

org.apache.cxf.tools.common.ToolException: org.apache.cxf.wsdl11.WSDLRuntimeException:创建 wsdl 失败 定义 https://raw.githubusercontent.com/mpromonet/spring-onvif/master/src/main/resources/wsdl/remotediscovery.wsdl: WSDLException(在 /wsdl:definitions/wsdl:types/xs:schema/xs:schema): faultCode=PARSER_ERROR: 解析问题 'http://schemas.xmlsoap.org/ws/2004/08/addressing'.: org.xml.sax.SAXParseException:文档中的标记如下 根元素必须格式正确。在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:420) 在 org.apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.java:103) 在 org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:113) 在 org.apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.java:86) 在 org.apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.java:184) 引起:org.apache.cxf.wsdl11.WSDLRuntimeException:创建失败 wsdl 定义 https://raw.githubusercontent.com/mpromonet/spring-onvif/master/src/main/resources/wsdl/remotediscovery.wsdl: WSDLException(在 /wsdl:definitions/wsdl:types/xs:schema/xs:schema): faultCode=PARSER_ERROR: 解析问题 'http://schemas.xmlsoap.org/ws/2004/08/addressing'.: org.xml.sax.SAXParseException:文档中的标记如下 根元素必须格式正确。在 org.apache.cxf.wsdl11.WSDLDefinitionBuilder.parseWSDL(WSDLDefinitionBuilder.java:97) 在 org.apache.cxf.wsdl11.WSDLDefinitionBuilder.build(WSDLDefinitionBuilder.java:69) 在 org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.build(JAXWSDefinitionBuilder.java:83) 在 org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.build(JAXWSDefinitionBuilder.java:60) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.processWsdl(WSDLToJavaContainer.java:198) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:164) 在 org.apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.java:412) ... 4 更多原因:javax.wsdl.WSDLException: WSDLException (at /wsdl:definitions/wsdl:types/xs:schema/xs:schema): faultCode=PARSER_ERROR: 解析问题 'http://schemas.xmlsoap.org/ws/2004/08/addressing'.: org.xml.sax.SAXParseException:文档中的标记如下 根元素必须格式正确。在 com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2198) 在 com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(WSDLReaderImpl.java:830) 在 com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(WSDLReaderImpl.java:864) 在 com.ibm.wsdl.xml.WSDLReaderImpl.parseSchema(WSDLReaderImpl.java:654) 在 com.ibm.wsdl.xml.WSDLReaderImpl.parseTypes(WSDLReaderImpl.java:610) 在 com.ibm.wsdl.xml.WSDLReaderImpl.parseDefinitions(WSDLReaderImpl.java:320) 在 com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2352) 在 com.ibm.wsdl.xml.WSDLReaderImpl.readWSDL(WSDLReaderImpl.java:2338) 在 org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:261) 在 org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:206) 在 org.apache.cxf.wsdl11.WSDLDefinitionBuilder.parseWSDL(WSDLDefinitionBuilder.java:78) ... 10 更多原因:org.xml.sax.SAXParseException: 中的标记 根元素之后的文档必须格式正确。在 com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247) 在 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:287) 在 com.ibm.wsdl.xml.WSDLReaderImpl.getDocument(WSDLReaderImpl.java:2188) ... 20 更多

【问题讨论】:

    标签: java web-services wsdl cxf


    【解决方案1】:

    我的猜测是这与ws-discovery.xsd 中的以下导入有关:

    <xs:import namespace="http://schemas.xmlsoap.org/ws/2004/08/addressing" schemaLocation="http://schemas.xmlsoap.org/ws/2004/08/addressing"/>
    

    令我惊讶的是,链接 http://schemas.xmlsoap.org/ws/2004/08/addressing 有效,但它首先将 (HTTP 301) 重定向到 http://schemas.xmlsoap.org/ws/2004/08/addressing/(注意尾随的 /)。

    我认为wsdl2java 不遵循重定向。您可以监控/嗅探网络连接以准确找出答案。

    无论如何,如何解决。

    您可以将catalog file 与 wsdl2java 一起使用:

    制作远程架构的本地副本并使用如下目录文件:

    SYSTEM "http://schemas.xmlsoap.org/ws/2004/08/addressing" "src/main/resources/addressing.xsd"
    

    addressing.xsd 是您的本地副本)。

    【讨论】:

    • ./wsdl2java -catalog ./wsdl/catalog -d ./generated -server ~/Documents/dev/src/spring-onvif/src/main/resources/wsdl/remotediscovery.wsdl 之后,我生成了包含文件的文件夹。我唯一的问题是:WSDL document file:/Users/asmirnov/Documents/dev/src/spring-onvif/src/main/resources/wsdl/remotediscovery.wsdl does not define any services 我认为它定义了一项服务来响应发现信号
    • @4ntoine 我猜这是一个不同的问题。
    【解决方案2】:

    当您访问 wsdl 文件时,这是 SSL 问题。你可以先下载wsdl文件,然后使用wsdl2java生成java代码。

    【讨论】:

    • 不,这不是原因。我尝试下载文件并使用本地文件路径运行
    【解决方案3】:

    从 wsdl 中删除样式表条目 &lt;?xml-stylesheet type="text/xsl" href="http://www.onvif.org/onvif/ver20/util/onvif-wsdl-viewer.xsl"?&gt; 并尝试重新生成。

    【讨论】:

    • 没有帮助,不幸的是仍然出现同样的错误消息
    • 您说您已经下载了wsdl文件并从本地运行。您是否还下载了 ws-discovery.xsd 并在 wsdl 文件中正确引用?
    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 2016-04-05
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多