Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在wsimport中映射未知的复杂类型_Java_Soap_Wsdl_Jax Ws_Wsimport - Fatal编程技术网

Java 如何在wsimport中映射未知的复杂类型

Java 如何在wsimport中映射未知的复杂类型,java,soap,wsdl,jax-ws,wsimport,Java,Soap,Wsdl,Jax Ws,Wsimport,目前,我尝试为wsdl-vis-wsimport生成一个web服务客户端,除了一种复杂类型外,该客户端工作得非常好: ... <element name="response"> <complexType> <sequence> <element name="methodReturn" type="apachesoap:Document"/> </sequence> </complexType> </e

目前,我尝试为wsdl-vis-wsimport生成一个web服务客户端,除了一种复杂类型外,该客户端工作得非常好:

...
<element name="response">
 <complexType>
  <sequence>
   <element name="methodReturn" type="apachesoap:Document"/>
  </sequence>
 </complexType>
</element>
...
当我将类型更改为

可以生成客户端。因此,生成只依赖未知的复杂类型


那么问题是:是否可以为wsimport提供一个自定义映射器,以便使用WSDL中的“apachesoap:Document”类型生成客户端?

  • apachesoap
    前缀提供名称空间
  • 导入或包含该命名空间的XSD架构,其中定义了
    Document
    类型。(在WSDL中或在WSDL中使用的任何XSD模式中)
  • 然后将正确生成客户端


    没有它,
    wsimport
    (或任何其他工具)就不知道什么类型的
    apachesoap:Document
    实际上意味着什么

  • apachesoap
    前缀提供名称空间
  • 导入或包含该命名空间的XSD架构,其中定义了
    Document
    类型。(在WSDL中或在WSDL中使用的任何XSD模式中)
  • 然后将正确生成客户端


    没有它,
    wsimport
    (或任何其他工具)就不知道类型
    apachesoap:Document
    实际上是什么意思。

    名称空间已经提供,但该实体没有xml模式。因此,我想自己为该文档提供一个映射器。最后,我只需要一个org.w3c.dom.Document表示。为什么不使用标准方式并在响应中使用实际的XML类型,而不是
    org.w3c.dom.Document
    ?我想您不能这样做,因为
    org.w3c.dom.Document
    不是XML类型,而是一个
    接口。那么,您认为以什么形式将这样的对象放入XML中呢?因为它是由第三方提供的wsdl,所以它需要是一个通用的返回类型。返回的xml非常复杂,无法生成或提供xsd。因为它是一个接口,所以我想为这个复杂类型提供一个映射器,这样我就可以返回一个提供这个接口的实现。因此,我想自己为该文档提供一个映射器。最后,我只需要一个org.w3c.dom.Document表示。为什么不使用标准方式并在响应中使用实际的XML类型,而不是
    org.w3c.dom.Document
    ?我想您不能这样做,因为
    org.w3c.dom.Document
    不是XML类型,而是一个
    接口。那么,您认为以什么形式将这样的对象放入XML中呢?因为它是由第三方提供的wsdl,所以它需要是一个通用的返回类型。返回的xml非常复杂,无法生成或提供xsd。因为它是一个接口,所以我想为这个复杂类型提供一个映射器,这样我就可以返回一个提供这个接口的实现。
    
    org.xml.sax.SAXParseException; systemId: file:/D:/dev/src/java/prj/src/wsdl/service.wsdl; lineNumber: 21; columnNumber: 80; undefined simple or complex type 'apachesoap:Document'
        at com.sun.xml.xsom.impl.parser.ParserContext$1.reportError(ParserContext.java:180)
        at com.sun.xml.xsom.impl.parser.NGCCRuntimeEx.reportError(NGCCRuntimeEx.java:175)
        at com.sun.xml.xsom.impl.parser.DelayedRef.resolve(DelayedRef.java:110)
        at com.sun.xml.xsom.impl.parser.DelayedRef.run(DelayedRef.java:85)
        at com.sun.xml.xsom.impl.parser.ParserContext.getResult(ParserContext.java:135)
        at com.sun.xml.xsom.parser.XSOMParser.getResult(XSOMParser.java:211)
        at com.sun.tools.xjc.ModelLoader.createXSOM(ModelLoader.java:538)
        at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:269)
        at com.sun.tools.xjc.api.impl.s2j.SchemaCompilerImpl.bind(SchemaCompilerImpl.java:95)
        at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:142)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2298)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:198)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:141)
        at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:444)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:205)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:183)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.mojo.jaxws.Invoker.main(Invoker.java:78)
    undefined simple or complex type 'apachesoap:Document'
      line 21 of file:/D:/dev/src/java/prj/src/wsdl/service.wsdl
    
    Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.codehaus.mojo.jaxws.Invoker.main(Invoker.java:78)
    Caused by: com.sun.tools.ws.wscompile.AbortException
        at com.sun.tools.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:144)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2298)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:198)
        at com.sun.tools.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:141)
        at com.sun.tools.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:444)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:205)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:183)
        ... 5 more