我升级之前使用web-service
的{{1}}客户端,现在使用axis
。请注意,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
时会选择WRAPPED
的绑定样式{通过wsdl2java
调用{1}},这很好。通过cxf-codegen-plugin
/ *PortType
生成的旧axistools-maven-plugin
类也具有wsdl2java
样式中的所有方法,其中WRAPPED
类作为参数类型且没有返回类型
但我的问题是,当我以前使用Holder
生成axistools-maven-plugin
类时,我的所有java
类也会自动生成以匹配*Holder
接口需要。但是对于*PortType
,只有cx-codegen-plugin
界面反映了*PortType
参数的WRAPPED
类型需要Holder
类型;我没有看到OUT
作为*Holder
的一部分生成的wsdl2java
类!
任何方式我都可以cxf-codegen-plugin
生成*Holder
类作为wsdl2java
的一部分而不自己编写它们?我不想切换到BARE
绑定样式,因为这意味着需要进行大量的重构。我不能像之前提到的那样修改WSDL
。
我使用v3.0.2
cxf-codegen-plugin
和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
);
答案 0 :(得分:0)
您不需要生成Holder
类;它是JAX-WS的一部分。
您可能想要检查编译器使用的JDK版本。据我所知,JAX-WS包含在版本6的Java SE中,因此如果您的编译器使用的是Java SE 5 - 这可能是您的问题。