Мыло с вложениями в CXF без MTOM - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь реализовать Soap с вложениями, используя первый подход CXF WSDL. Здесь это так.

Я создал привязку мыла с двумя типами 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
);

}

Когда я загружаю wsdl в SOAPUI, он дает мне следующий запрос.

enter image description here

Я создал конечную точку jaxws: следующим образом

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

Когда я запускаю запрос в soapui, я всегда получаюnull для demandPhoto аргумента метода sendClaim (посмотрите на сгенерированный интерфейс выше).Массив байтов всегда равен нулю.Но метод ClaimForm получает правильный DataHandler для ClaimForm элемента demandDetail аргумента.

Что пошло не так в этом?

...