我正在升级一个以前使用axis的web-service客户端,现在使用CXF。请注意,web-service属于第三方,因此我自己没有修改wsdl的权限。
<message name="doSomethingRequest">
<part name="parameters" element="doSomething" />
</message>
<message name="doSomethingResponse">
<part name="parameters" element="doSomethingResponse" />
</message>
<portType name="myServicePortType">
<operation name="doSomething">
<input message="doSomethingRequest" />
<output message="doSomethingResponse" />
</operation>
</portType>正如您所看到的,通过这种方式,message和operation都记录在WSDL中,当通过cxf-codegen-plugin调用WRAPPED时,会选择wsdl2java的绑定样式,这很好。我的旧*PortType类(通过axistools-maven-plugin / wsdl2java生成)也具有WRAPPED样式的所有方法,并将Holder类作为参数类型,而不是返回类型。
但我的问题是,当我以前使用axistools-maven-plugin生成java类时,我的所有*Holder类也都是自动生成的,以满足*PortType接口需求。但是对于cx-codegen-plugin,只有*PortType接口反映了WRAPPED样式,该样式要求OUT参数使用Holder类型;我没有看到作为wsdl2java的一部分生成的*Holder类!
有没有办法让cxf-codegen-plugin生成*Holder类作为wsdl2java的一部分,而不需要自己编写它们?我不想切换到BARE绑定样式,因为这将意味着大量的重构。我也不能像我之前提到的那样修改WSDL。
我使用cxf-codegen-plugin的v3.0.2和JAXB数据绑定fwiw。
@RequestWrapper(localName = "doSomething", targetNamespace = "...", className = "...DoSomething")
@WebMethod(action = "urn:#doSomething")
@ResponseWrapper(localName = "doSomethingResponse", targetNamespace = "...", className = "...DoSomethingResponse")
public void doSomething(
@WebParam(name = "requestParam1", targetNamespace = "...")
java.lang.String requestParam1,
@WebParam(name = "requestParam2", targetNamespace = "...")
java.lang.String requestParam2,
// the below holders for SomeType1 and SomeType2, i.e the SomeType1Holder and SomeType2Holder, are not auto-generated as part of the wsdl2java
@WebParam(mode = WebParam.Mode.OUT, name = "responseParam1", targetNamespace = "...")
javax.xml.ws.Holder<SomeType1> responseParam1,
@WebParam(mode = WebParam.Mode.OUT, name = "responseParam2", targetNamespace = "...")
javax.xml.ws.Holder<SomeType2> responseParam2
);发布于 2015-11-04 19:57:33
您不需要生成Holder类;它是JAX-WS的一部分。
您可能希望检查编译器使用的JDK版本。据我所知,JAX-WS包含在Java的版本6中,所以如果您的编译器使用JavaSE5,这可能就是您的问题所在。
https://stackoverflow.com/questions/27907281
复制相似问题