Я пытаюсь реализовать 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, он дает мне следующий запрос.
Я создал конечную точку jaxws: следующим образом
<jaxws:endpoint id="claimPortType"
implementor="com.example.mimewsdl.ClaimStoragePortImpl"
address="/Claims">
</jaxws:endpoint>
Когда я запускаю запрос в soapui, я всегда получаюnull для demandPhoto аргумента метода sendClaim (посмотрите на сгенерированный интерфейс выше).Массив байтов всегда равен нулю.Но метод ClaimForm получает правильный DataHandler для ClaimForm элемента demandDetail аргумента.
Что пошло не так в этом?