gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:21:03 24 4
gpt4 key购买 nike

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

...
<element name="response">
<complexType>
<sequence>
<element name="methodReturn" type="apachesoap:Document"/>
</sequence>
</complexType>
</element>
...

当我尝试通过 wsimport 生成客户端时,我得到:

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

当我将类型更改为 <element name="methodReturn" type="xsd:anySimpleType"/>

可以生成客户端。所以这一代只是卡在未知的复杂类型上。

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

最佳答案

在 WSDL 中,您必须

  1. apachesoap 前缀提供命名空间
  2. 导入或包含该命名空间的 XSD 架构,其中定义了 Document 类型。 (在 WSDL 中或在 WSDL 中使用的任何 XSD 模式中)

然后客户端就会正确生成。

没有它,wsimport(或任何其他工具)就不知道 apachesoap:Document 类型的实际含义。

关于java - 如何在 wsimport 中映射未知的复杂类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44905962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com