不含MTOM的CXF中带有附件的肥皂

时间:2018-12-13 10:30:33

标签: soap cxf soapui mime wsdl2java

我正在尝试使用CXF WSDL第一种方法来实现带有附件的Soap。Here是这样。

我用以下两种mime类型创建了肥皂绑定

<wsdl:binding name="ClaimBinding" type="tns:ClaimPortType">
    <soapbind:binding style="rpc"
                      transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="SendClaim">
        <soapbind:operation soapAction="http://example.com/soapaction"/>
        <wsdl:input>
            <mime:multipartRelated>
                <mime:part name="bodyPart">
                    <soapbind:body use="literal"
                                   parts="ClaimDetail"
                                   namespace="http://example.com/mimetypes"/>
                </mime:part>
                <mime:part name="imageData">
                    <mime:content part="ClaimPhoto"
                                  type="image/jpeg"/>
                </mime:part>
            </mime:multipartRelated>
        </wsdl:input>
        <wsdl:output>
            <soapbind:body use="literal"
                           namespace="http://example.com/mimetypes"/>
        </wsdl:output>
    </wsdl:operation>

如您所见,输入有两个哑剧部分。

对于第一部分( ClaimDetail ),它具有两个元素,名称 ClaimForm ,其中ClaimForm的类型为 swaRef 。我使用cxf wsdl2java工具生成了代码,并且生成了以下界面。

@WebService(targetNamespace = "http://example.com/mimewsdl", name = "ClaimPortType")
@XmlSeeAlso({com.example.mimetypes.ObjectFactory.class})
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface ClaimPortType {

@WebMethod(operationName = "SendClaim", action = "http://example.com/soapaction")
@WebResult(name = "ClaimRefNo", targetNamespace = "http://example.com/mimewsdl", partName = "ClaimRefNo")
public java.lang.String sendClaim(
    @WebParam(partName = "ClaimDetail", name = "ClaimDetail")
    com.example.mimetypes.ClaimDetailType claimDetail,
    @WebParam(partName = "ClaimPhoto", name = "ClaimPhoto")
    byte[] claimPhoto
);

}

当我在SOAPUI中加载wsdl时,它发出了以下请求。

enter image description here

我如下创建了jaxws:endpoint

<jaxws:endpoint id="claimPortType"
    implementor="com.example.mimewsdl.ClaimStoragePortImpl"
    address="/Claims">
</jaxws:endpoint>

当我在soapui中运行请求时,我总是得到 sendClaim 方法的 claimPhoto 参数的空值(请参见上面生成的界面)。字节数组始终为null。但是ClaimForm方法正在为 claimDetail 参数的 ClaimForm 元素获取适当的DataHandler。

这是怎么了?

0 个答案:

没有答案