Java 如何在wsimport中映射未知的复杂类型
目前,我尝试为wsdl-vis-wsimport生成一个web服务客户端,除了一种复杂类型外,该客户端工作得非常好: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
...
<element name="response">
<complexType>
<sequence>
<element name="methodReturn" type="apachesoap:Document"/>
</sequence>
</complexType>
</element>
...
当我将类型更改为
可以生成客户端。因此,生成只依赖未知的复杂类型
那么问题是:是否可以为wsimport提供一个自定义映射器,以便使用WSDL中的“apachesoap:Document”类型生成客户端?
apachesoap
前缀提供名称空间Document
类型。(在WSDL中或在WSDL中使用的任何XSD模式中)没有它,
wsimport
(或任何其他工具)就不知道什么类型的apachesoap:Document
实际上意味着什么
apachesoap
前缀提供名称空间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