【发布时间】:2015-09-28 12:30:26
【问题描述】:
我有一个这样的 WSDL:
...
<wsdl:message name="myHeader">
<wsdl:part name="parameter" element="header:myHeader"/>
</wsdl:message>
...
<wsdl:operation name="myOperation">
<soap:operation soapAction="myOperation" style="document" />
<wsdl:input name="myOperationRequest">
<soap:header message="mySession:myHeader" part="header" use="literal"/>
<soap:body parts="parameters" use="literal" />
</wsdl:input>
<wsdl:output name="myOperationResponse">
<soap:body parts="parameters" use="literal" />
</wsdl:output>
<wsdl:fault name="myOperationException">
<soap:fault name="createTroubleTicketByValueException" use="literal" />
</wsdl:fault>
</wsdl:operation>
....
我使用 wsdl2java 将我的 WSDL 转换为 Java,在 exsh 设置为 true 的转换过程中没有问题。 但是当我启动我的应用程序(Spring 4,CXF 2.7)时,我收到以下警告:
2015-09-28 14:19:04,640 WARN [main] o.a.c.s.f.ReflectionServiceFactoryBean(1525) - 方法接口 ....XXXSessionWSPort.myOperation 配置为 BARE 但有多个参数带有错误的 @Webparam 注释或没有注释@WebParam 注释。
如果我仔细观察生成的 WsPort:
@WebResult(name = "myOperationResponse", targetNamespace = "http://myNamespace", partName = "parameters")
@WebMethod(action = "myOperation")
public myOperationResponse myOperation(
@WebParam(partName = "parameters", name = "myOperationRequest", targetNamespace = "http://myNameSpace")
myOperationRequest parameters,
@WebParam(partName = "parameters", name = "myheader", targetNamespace = "http://headerNameSpace", header = true)
myHeader parameters1) throws myOperationException;
此外,作为客户端,当我调用 myOperation CXF/JAXB/Jax-ws/...(?) 在 myHeader 标记的末尾添加“1”时,服务器无法处理标头。 ..
在ReflectionServiceFactoryBean类中调试后,我看到问题来自两个@WebParam中的相同partName。
要更正此问题,我必须将标头的部分名称更改为 WSDL,但我不能:它不是我的。
所以我会在 jaxb 绑定 xml 文件中进行此更改,如果可能的话,我该怎么做?
如果您有更好的解决方案,请不要犹豫!
【问题讨论】:
标签: java xml web-services jaxb wsdl