O documento explica como trabalhar com anexos SOAP usando o módulo CXF do Mule. Ele descreve como receber e extrair anexos usando o interceptor CopyAttachmentInInterceptor e como adicionar anexos e enviá-los usando o interceptor CopyAttachmentOutInterceptor e configurando a propriedade cxf_attachments.
1. Trabalhando com anexos SOAP usando módulo CXF do Mule
É bastante comum que você pode precisar adicionar / extrair
anexos ao trabalhar com sabão serviços baseados na Web (WS).
Neste curto post vamos explicar como fazê-lo utilizando o módulo
CXF do Mulo.
Receber e extrair anexos
Durante a recepção de uma mensagem SOAP, a primeira coisa que
você deve saber é que Mule não copia anexos SOAP para a sua
mensagem Mule. Se você quiser fazer isso, você vai precisar
adicionar um interceptor especial CXF para fazê-lo
(CopyAttachmentInInterceptor). O próximo trecho de código mostra
como adicionar que interceptor:
<http:inbound-endpoint
address="http://localhost:1234/webServiceUrl" exchange-
pattern="request-response">
<cxf:jaxws-service serviceClass="com.WebService">
<cxf:inInterceptors>
<spring:bean
class="org.mule.module.cxf.support.CopyAttachmentInInterceptor"/>
</cxf:inInterceptors>
</cxf:jaxws-service>
</http:inbound-endpoint>
2. Todos os anexos são copiados para a propriedade cxf_attachments
invocação da mensagem. Observe que o valor dessa propriedade é
uma coleção de acessórios. Para trabalhar com anexos que você
pode usar o transformador de expressão, por exemplo, o seguinte
trecho de código extrair o conteúdo do primeiro anexo da lista e
define-a como a carga atual da mensagem:
<expression-transformer>
<return-argument evaluator="header"
expression="INVOCATION:cxf_attachments" />
</expression-transformer>
<expression-transformer>
<return-argument evaluator="groovy"
expression="payload.iterator().next().getDataHandler().getContent()"
/>
</expression-transformer>
Adicionar anexos e enviar.
Por outro lado, se você quiser enviar anexos em uma WS você vai
precisar para criar a propriedade cxf_attachments e depois usar o
interceptor CopyAttachmentOutInterceptor para copiar esses
anexos à mensagem SOAP. O seguinte trecho de código adiciona
um anexo e chama o WS:
<custom-processor class="com.AddAttachmentMessageProcessor"
/>