1

我是 Java 新手。我正在尝试创建 SOAP Web 服务客户端来使用需要用户名密码和 ssl 证书的供应商 Web 服务。

供应商向我提供了 SoapUI 项目文件。我在 SoapUI 中导入了项目文件并运行了测试。这些测试成功地进行了。

然后我使用 SoapUI 导出了 wsdl 文件并尝试使用 wsimport 生成 java 代码。我无法生成代码。我遇到了各种各样的错误,我试图通过在线搜索来解决这些错误,但没有一个解决方案有效。

我正在使用jdk1.8.0_152。SmartBear 的 SoapUI 5.3.0 版。

我尝试在Windows 7的命令行上使用这个 wsimport 命令:

wsimport -keep -verbose -s src vendor.wsdl

我收到了这条消息:

[WARNING] Simple type "RiskType" was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 365, current limit: 256. You can use customization attribute "typesafeEnumMaxMembers" to extend the limit.

文件的第 4317 行:/C:/Projects/soapclient/vendor.xsd

使用 SoapUI 项目文件,他们还向我发送了以下文件:

  • jaxbbinding.xml
  • wsdlbinding.xml
  • ACORD_v2.2.0.xsd
  • ACORD-WSP_v2.0.0.xsd
  • Soap12-信封.xsd
  • xml.xsd

所以尝试了带有 -b 选项的 wsimport,如下所示:

wsimport -keep -verbose -s src vendor.wsdl -b ../jaxb/jaxbbinding.xml -b ../jaxb/wsdlbinding.xml

我收到了这个错误:

[ERROR] "file:/C:/Projects/soapclient/.../ACORD_v2.2.0.xsd" is not a part of this compilation. Is this a mistake for "file:/C:/Projects/soapclient/..../ProcessSuretyBond_1_2.xsd"?
  line 13 of file:/C:/Projects/TestProjects/soapclient/..../jaxb/jaxbbinding.xml

Exception in thread "main" com.sun.tools.internal.ws.wscompile.AbortException
        at com.sun.tools.internal.ws.processor.modeler.wsdl.JAXBModelBuilder.bind(JAXBModelBuilder.java:129)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildJAXBModel(WSDLModeler.java:2283)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:183)
        at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.buildModel(WSDLModeler.java:126)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.buildWsdlModel(WsimportTool.java:429)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:190)
        at com.sun.tools.internal.ws.wscompile.WsimportTool.run(WsimportTool.java:168)
        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 com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:159)
        at com.sun.tools.internal.ws.WsImport.main(WsImport.java:42)

不确定,但我应该向供应商索取新的绑定文件吗?

它可以在 SoapUI 中使用,所以它不应该与 wsimport 一起使用吗?

我尝试了所有解决方案来解决这个问题,包括在 jdk 文件夹中创建 jaxb.properties 文件,在 maven 的系统设置中添加 jvm 参数等。没有工作。

如果有人能指出我正确的方向并帮助解决这个问题,我将不胜感激。提前谢谢了。

4

1 回答 1

4

尝试这个:

wsimport ./vendor.wsdl -Xnocompile -d ./src -extension -keep -XadditionalHeaders -B-XautoNameResolution

您不需要使用供应商提供的绑定文件。您需要从供应商处收到的最后 4 个文件才能使上述命令正常工作。

于 2017-12-01T17:50:09.903 回答