Wsimport 不工作
Wsimport don't work
我想用 Java 编写一个 WebService 客户端,但它不起作用。
我用 "c:\Program Files (x86)\Java\jdk1.8.0_60\bin\wsimport.exe" http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?wsdl
运行这个命令和我得到的结果一样:操作"Consulta_EDOPROC"多一个链接到正文部分。第 58 行
[ERROR] Operación "Consulta_DNPRC": hay más de una parte enlazada al cuerpo.
línea 58 de http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?wsdl
Exception in thread "main" com.sun.tools.internal.ws.wscompile.AbortException
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModelerBase.error(WSDLModelerBase.java:732)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.setMessagePartsBinding(WSDLModeler.java:1505)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.setMessagePartsBinding(WSDLModeler.java:1431)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.processLiteralSOAPOperation(WSDLModeler.java:767)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.processSOAPOperation(WSDLModeler.java:698)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.processPort(WSDLModeler.java:466)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.processService(WSDLModeler.java:245)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:216)
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:497)
at com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:159)
at com.sun.tools.internal.ws.WsImport.main(WsImport.java:42)
无论名为 "Body" 的部分在哪里,wsdl 都存在问题,例如
<wsdl:message name="Consulta_DNPRCHttpGetOut">
<wsdl:part name="Body"/>
</wsdl:message>
甚至在警告消息中也看到了
[WARNING] warning: part Body is ignored, either the "element" or the "type" attribute is required in part "Body"
line 125 of http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?wsdl
问题是缺少的那部分应该有元素或类型属性。更正它,您可以获得通过 wsimport 生成的相应 java 个对象。
我也遇到了同样的问题,我是这样解决的:
- 我已经创建了一个 Maven 项目。
- 在 pom.xml 中,我添加了“org.codehaus.mojo:jaxws-maven-plugin”插件。
- 我在src/main/binding/binding.xml
中创建了一个绑定文件
- 我已经使用服务器的证书路径创建了一个信任库文件 https://ovc.catastro.meh.es/。
pom.xml中的插件部分:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.5</version>
<configuration>
<sourceDestDir>${project.build.sourceDirectory}</sourceDestDir>
<bindingDirectory>${project.basedir}/src/main/bindings</bindingDirectory>
<extension>true</extension>
<genWsdl>false</genWsdl>
<xdisableSSLHostnameVerification>false</xdisableSSLHostnameVerification>
<keep>true</keep>
<protocol>soap1.1</protocol>
<verbose>true</verbose>
<xnocompile>true</xnocompile>
<xdebug>true</xdebug>
</configuration>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<vmArgs>
<vmArg>-Djavax.net.ssl.trustStore=${project.basedir}/src/main/ssl/catastro.jks</vmArg>
<vmArg>-Djavax.net.ssl.trustStorePassword=changeit</vmArg>
</vmArgs>
<wsdlUrls>
<wsdlUrl>https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL</wsdlUrl>
</wsdlUrls>
</configuration>
</execution>
</executions>
</plugin>
重要:使用<extension>true</extension>
标签。
binding.xml源码:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:annox="http://annox.dev.java.net"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:globalBindings collectionType="java.util.ArrayList"
underscoreBinding="asCharInWord"
enableJavaNamingConventions="true" generateIsSetMethod="false"
typesafeEnumBase="xs:string" typesafeEnumMemberName="generateName">
<jxb:serializable uid="1" />
</jxb:globalBindings>
</jxb:bindings>
执行mvn clean install
,插件生成JAXB 类:
[INFO] Processing: https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL
[INFO] jaxws:wsimport args: [-keep, -s, '/workspace/catastro-workitem/src/main/java', -d, '/workspace/catastro-workitem/target/classes', -verbose, -encoding, UTF-8, -extension, -Xnocompile, -Xdebug, -b, 'file:/workspace/catastro-workitem/src/main/bindings/binding.xml', "https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL"]
parsing WSDL...
.../...
.../...
Generating code...
es/meh/catastro/Callejero.java
es/meh/catastro/Consulta_DNP.java
es/meh/catastro/Consulta_DNPPP.java
es/meh/catastro/Municipios.java
es/meh/catastro/ObjectFactory.java
es/meh/catastro/Provincias.java
es/meh/catastro/package-info.java
org/tempuri/ovcservweb/ovccallejero/CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catastro.java
org/tempuri/ovcservweb/ovccallejero/CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroHttpGet.java
org/tempuri/ovcservweb/ovccallejero/CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroHttpPost.java
org/tempuri/ovcservweb/ovccallejero/CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroSoap.java
org/tempuri/ovcservweb/ovccallejero/package-info.java
我想用 Java 编写一个 WebService 客户端,但它不起作用。
我用"c:\Program Files (x86)\Java\jdk1.8.0_60\bin\wsimport.exe" http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?wsdl
运行这个命令和我得到的结果一样:操作"Consulta_EDOPROC"多一个链接到正文部分。第 58 行
[ERROR] Operación "Consulta_DNPRC": hay más de una parte enlazada al cuerpo.
línea 58 de http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?wsdl
Exception in thread "main" com.sun.tools.internal.ws.wscompile.AbortException
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModelerBase.error(WSDLModelerBase.java:732)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.setMessagePartsBinding(WSDLModeler.java:1505)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.setMessagePartsBinding(WSDLModeler.java:1431)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.processLiteralSOAPOperation(WSDLModeler.java:767)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.processSOAPOperation(WSDLModeler.java:698)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.processPort(WSDLModeler.java:466)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.processService(WSDLModeler.java:245)
at com.sun.tools.internal.ws.processor.modeler.wsdl.WSDLModeler.internalBuildModel(WSDLModeler.java:216)
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:497)
at com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:159)
at com.sun.tools.internal.ws.WsImport.main(WsImport.java:42)
无论名为 "Body" 的部分在哪里,wsdl 都存在问题,例如
<wsdl:message name="Consulta_DNPRCHttpGetOut">
<wsdl:part name="Body"/>
</wsdl:message>
甚至在警告消息中也看到了
[WARNING] warning: part Body is ignored, either the "element" or the "type" attribute is required in part "Body"
line 125 of http://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?wsdl
问题是缺少的那部分应该有元素或类型属性。更正它,您可以获得通过 wsimport 生成的相应 java 个对象。
我也遇到了同样的问题,我是这样解决的:
- 我已经创建了一个 Maven 项目。
- 在 pom.xml 中,我添加了“org.codehaus.mojo:jaxws-maven-plugin”插件。
- 我在src/main/binding/binding.xml 中创建了一个绑定文件
- 我已经使用服务器的证书路径创建了一个信任库文件 https://ovc.catastro.meh.es/。
pom.xml中的插件部分:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.5</version>
<configuration>
<sourceDestDir>${project.build.sourceDirectory}</sourceDestDir>
<bindingDirectory>${project.basedir}/src/main/bindings</bindingDirectory>
<extension>true</extension>
<genWsdl>false</genWsdl>
<xdisableSSLHostnameVerification>false</xdisableSSLHostnameVerification>
<keep>true</keep>
<protocol>soap1.1</protocol>
<verbose>true</verbose>
<xnocompile>true</xnocompile>
<xdebug>true</xdebug>
</configuration>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<vmArgs>
<vmArg>-Djavax.net.ssl.trustStore=${project.basedir}/src/main/ssl/catastro.jks</vmArg>
<vmArg>-Djavax.net.ssl.trustStorePassword=changeit</vmArg>
</vmArgs>
<wsdlUrls>
<wsdlUrl>https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL</wsdlUrl>
</wsdlUrls>
</configuration>
</execution>
</executions>
</plugin>
重要:使用<extension>true</extension>
标签。
binding.xml源码:
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="1.0"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:annox="http://annox.dev.java.net"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:globalBindings collectionType="java.util.ArrayList"
underscoreBinding="asCharInWord"
enableJavaNamingConventions="true" generateIsSetMethod="false"
typesafeEnumBase="xs:string" typesafeEnumMemberName="generateName">
<jxb:serializable uid="1" />
</jxb:globalBindings>
</jxb:bindings>
执行mvn clean install
,插件生成JAXB 类:
[INFO] Processing: https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL
[INFO] jaxws:wsimport args: [-keep, -s, '/workspace/catastro-workitem/src/main/java', -d, '/workspace/catastro-workitem/target/classes', -verbose, -encoding, UTF-8, -extension, -Xnocompile, -Xdebug, -b, 'file:/workspace/catastro-workitem/src/main/bindings/binding.xml', "https://ovc.catastro.meh.es/ovcservweb/OVCSWLocalizacionRC/OVCCallejero.asmx?WSDL"]
parsing WSDL...
.../...
.../...
Generating code...
es/meh/catastro/Callejero.java
es/meh/catastro/Consulta_DNP.java
es/meh/catastro/Consulta_DNPPP.java
es/meh/catastro/Municipios.java
es/meh/catastro/ObjectFactory.java
es/meh/catastro/Provincias.java
es/meh/catastro/package-info.java
org/tempuri/ovcservweb/ovccallejero/CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020Catastro.java
org/tempuri/ovcservweb/ovccallejero/CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroHttpGet.java
org/tempuri/ovcservweb/ovccallejero/CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroHttpPost.java
org/tempuri/ovcservweb/ovccallejero/CallejeroX0020DeX0020LaX0020SedeX0020ElectrónicaX0020DelX0020CatastroSoap.java
org/tempuri/ovcservweb/ovccallejero/package-info.java