从 WSDL 文件生成 Java 代码

Generate Java code from WSDL file

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

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

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

我正在使用 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 项目文件,他们还向我发送了以下文件:

所以尝试使用 -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 参数等。None 有效。

如果有人能指出正确的方向并帮助解决此问题,我将不胜感激。非常感谢。

试试这个:

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

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