wsimport [ERROR] 无法生成 SEI, 类com.xx.XX 已存在。请使用JAX-WS定制设置重命名 wsdl:portType

使用 jaxws-ri-2.2.10,根据wsdl文件生成webservice客户端:

wsimport -s src -d bin -p com.client document.xml

出现错误,错误如下:[ERROR] 无法生成 SEI, 类com.client.XX 已存在。请使用JAX-WS定制设置重命名 wsdl:portType

Exception in thread "main" com.sun.tools.ws.wscompile.AbortException
        at com.sun.tools.ws.wscompile.WsimportTool.generateCode(WsimportTool.java:469)
        at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:209)
        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:497)
        at com.sun.tools.ws.Invoker.invoke(Invoker.java:174)
        at com.sun.tools.ws.WsImport.main(WsImport.java:57)

原因是wsdl:portType 的名称和wsdl:operation的名称相同导致的,我的wsdl(document.xml)中:ZMM_QYZXK_SPP_CGZT和ZmmQyzxkSppCgzt去掉下划线、不区分大小写的情况下,是同名文件。

	<wsdl:portType name="ZMM_QYZXK_SPP_CGZT">
		<wsp:Policy>
			<wsp:PolicyReference URI="#IF_ZMM_QYZXK_SPP_CGZT" />
		</wsp:Policy>
		<wsdl:operation name="ZmmQyzxkSppCgzt">
			<wsp:Policy>
				<wsp:PolicyReference URI="#OP_ZmmQyzxkSppCgzt" />
			</wsp:Policy>
			<wsdl:input message="tns:ZmmQyzxkSppCgzt" />
			<wsdl:output message="tns:ZmmQyzxkSppCgztResponse" />
		</wsdl:operation>
	</wsdl:portType>

解决方法使用customization进行重命名(可以重命名各种名称),重命名ZMM_QYZXK_SPP_CGZT为新名称ZMMQYZXKSPPCGZTClass:bind.xml

<bindings 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    wsdlLocation="file:/E:/document/download/jaxws-ri-2.2.10/bin/document.xml"
    xmlns="http://java.sun.com/xml/ns/jaxws">
    <package name="com.lantong.dpcenter.ws.erpclientCgzt"/>
    <!-- default settings -->
    <enableWrapperStyle>true</enableWrapperStyle>
    <enableAsyncMapping>false</enableAsyncMapping>
    <!-- wsdl:portType customization -->
    <bindings node="wsdl:definitions/wsdl:portType[@name='ZMM_QYZXK_SPP_CGZT']">
        <!-- change the generated SEI class -->
        <class name="ZMMQYZXKSPPCGZTClass"/>
        <!-- you can also override the following customization settings -->
        <enableWrapperStyle>true</enableWrapperStyle>
        <enableAsyncMapping>false</enableAsyncMapping>
    </bindings>
</bindings>

使用 -b <path>     指定 jaxws/jaxb 绑定文件或附加模式

wsimport -s src -d bin -b bind.xml -p com.client document.xml

搞定

扫描二维码关注公众号,回复: 347066 查看本文章

参考

http://www.mincoder.com/article/859.shtml

猜你喜欢

转载自bnmnba.iteye.com/blog/2384459