我需要部署一个合同优先的网络服务。该服务本身很简单,只需一个 ping 操作即可检查系统是否可用。
平.wsdl:
<?xml version="1.0" encoding="utf-8"?>
<definitions targetNamespace="urn:hl7-org:v3" name="Ping" xmlns:hl7="urn:hl7-org:v3" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<types>
<xsd:schema targetNamespace="urn:hl7-org:v3" elementFormDefault="qualified" xmlns:hl7="urn:hl7-org:v3" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:include schemaLocation="../schemas_codeGen/COMT_IN118118.xsd" />
<xsd:include schemaLocation="../schemas_codeGen/COMT_IN229229.xsd" />
</xsd:schema>
</types>
<message name="COMT_IN118118"><part name="body" element="hl7:COMT_IN118118" /></message>
<message name="COMT_IN229229"><part name="body" element="hl7:COMT_IN229229" /></message>
<portType name="Ping_PortType">
<operation name="Ping_PingPong">
<input message="hl7:COMT_IN118118" />
<output message="hl7:COMT_IN229229" />
</operation>
</portType>
<binding type="hl7:Ping_PortType" name="Ping_Binding">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="Ping_PingPong">
<soap:operation soapAction="urn:hl7-org:v3/Ping_PingPong" />
<input><soap:body use="literal" /></input>
<output><soap:body use="literal" /></output>
</operation>
</binding>
<service name="Ping_Service">
<port binding="hl7:Ping_Binding" name="Ping_Port"><soap:address location="http:/www.xis.nl/Ping" /></port>
</service>
</definitions>
我应该能够在远程调用这个 web 服务并提供这个服务,以便远程可以调用我机器上的服务。我使用 wsimport 从 WSDL 生成了 Java 代码,从而生成了用于 COMT_IN118118 和 COMT_IN229229 消息的 Java 类以及带有部署所需注释的接口 PingPortType:
@WebService(name = "Ping_PortType", targetNamespace = "urn:hl7-org:v3")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)
@XmlSeeAlso({
ObjectFactory.class
})
public interface PingPortType {
@WebMethod(operationName = "Ping_PingPong", action = "urn:hl7-org:v3/Ping_PingPong")
@WebResult(name = "COMT_IN229229", targetNamespace = "urn:hl7-org:v3", partName = "body")
public COMTIN229229MCCIMT000300Message pingPingPong(
@WebParam(name = "COMT_IN118118", targetNamespace = "urn:hl7-org:v3", partName = "body")
COMTIN118118MCCIMT000100Message body);
}
我想通过spring部署我的服务并添加到我的applicationContext中:
<jaxws:endpoint id="pingEndpoint" address="/Ping"
implementor="com.application.services.impl.PingServiceImpl"
wsdlLocation="wsdl/Ping.wsdl" serviceName="hl7:Ping_Service"
endpointName="hl7:Ping_Port">
</jaxws:endpoint>
这里的“hl7”是“urn:hl7-org:v3”命名空间的缩写,PingServiceImpl 是实现PingPortType 的类。
启动时,CXF 记录:
Operation {urn:hl7-org:v3}Ping_PingPong cannot be unwrapped, input message must reference global element declaration with same localname as operation
这很奇怪,因为 PingPortType 上的 @SoapBinding 声明 parameterStyle 应该是 BARE,而不是默认的 WRAPPED。有些东西忽略/覆盖了我的@SoapBinding,但我不知道是什么。
另外,为什么 CXF 会将此记录为 DEBUG 消息?在我看来,错误会更合适(并且赞赏......)。