我使用WSDL2Java构建客户端代理。我查询的Web服务需要按照WSDL中的规定执行WSA策略。
以下是我生成代码的方法(Ant任务)
<java classname="org.apache.cxf.tools.wsdlto.WSDLToJava">
<arg value="-p" />
<arg value="@{package}" />
<arg value="-client" />
<arg value="-exsh" />
<arg value="true" />
<arg value="-verbose" />
<arg value="-mark-generated" />
<arg value="-b" />
<arg value="dev/jaxb-bindings.xml" />
<arg value="-d" />
<arg value="gen" />
<arg value="@{wsdl}" />
<classpath>
<path refid="cxf.classpath" />
</classpath>
</java>
目标WSDL是:
(只有前两个强制执行WSA)
来自DealService
的片段:
<wsdl:service name="DealService">
<wsdl:port name="wsHttp_DealServiceEndPoint" binding="tns:wsHttp_DealServiceEndPoint">
<soap12:address location="https://edwin.eurodw.eu/edservices/2.3/DealService.svc" />
<wsa10:EndpointReference>
<wsa10:Address>https://edwin.eurodw.eu/edservices/2.3/DealService.svc</wsa10:Address>
</wsa10:EndpointReference>
</wsdl:port>
</wsdl:service>
结果带注释的界面(IDealService
)缺少@Addressing
注释,我必须手动添加
@WebService(targetNamespace = "http://edwin.eurodw.eu/EDServices/2.2", name = "IDealService")
@XmlSeeAlso({ObjectFactory.class})
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@Generated(value = "org.apache.cxf.tools.wsdlto.WSDLToJava", date = "2014-10-20T11:24:25.099+02:00", comments = "Apache CXF 2.7.12")
public interface IDealService {
由于构建带注释的接口是自动构建过程的一部分,我如何告诉wsdl2java使用寻址功能?我在类路径中有整个CXF运行时
WSDL是公共的,因此您可以测试自己的生成(但不是实际调用,因为您需要用户测试凭据)