2014-06-17 4 views
0

Je cherche à faire ce qui suit:services web mule proxy esb demande avec pièce jointe

Consommez une requête Web avec des pièces jointes

transform la demande où il a besoin pour régler la ContentStream de la demande, la transformation La requête ressemble à ceci:

<ns:contentStream> 
     <!--Optional:--> 
     <ns:length>?</ns:length> 
     <!--Optional:--> 
     <ns:mimeType>?</ns:mimeType> 
     <!--Optional:--> 
     <ns:filename>?</ns:filename> 
     <ns:stream>cid:96497346318</ns:stream> 
     <!--You may enter ANY elements at this point--> 
    </ns:contentStream> 

puis d'envoyer une requête à alfresco pour créer un document.

mon flux ressemble à ceci:

<flow name="SOAP2SOAPFlow2" doc:name="SOAP-2-SOAP proxy using CXF"> 
    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8081" path="cc" doc:name="HTTP"/> 
    <cxf:proxy-service namespace="urn:greeter:GreeterResponder:1" 
     service="GreeterResponderService" payload="body" 
     wsdlLocation="schemas/interactions/GreeterInteraction/GreeterInteraction_1.0.wsdl" 
     enableMuleSoapHeaders="false" doc:name="SOAP"/>   
<mulexml:xslt-transformer 
     maxIdleTransformers="2" maxActiveTransformers="5" 
     outputEncoding="UTF-8" doc:name="Transform from outer to inner" 
     xsl-file="transform-outer2inner.xslt" encoding="UTF-8" 
     returnClass="java.lang.String"/> 
<cxf:proxy-client payload="body" enableMuleSoapHeaders="true"/ > 
    <http:outbound-endpoint exchange-pattern="request-response" 
     address="http://localhost:8080/alfresco/cmisws/ObjectService" doc:name="HTTP" /> 
</flow> 

alors comment puis-je ajouter des pièces jointes à la charge utile lors de l'envoi d'une demande de createDocument à Alfresco?

Merci d'avance!

Répondre

0

Vous pouvez ajouter une pièce jointe à l'aide de la classe Java ... Vous devez ajouter ajouter un processeur personnalisé avant le service proxy CXF et l'appel d'une classe Java. et l'étape suivante consiste à ajouter un CxF: outInterceptors à roxy service CXF La configuration Mule suit: -

<flow name="SOAP2SOAPFlow2" doc:name="SOAP-2-SOAP proxy using CXF"> 
    <http:inbound-endpoint exchange-pattern="request-response" 
     host="localhost" port="8081" path="cc" doc:name="HTTP"/> 
    <custom-processor class="com.test.services.schema.SOAPOptionalData.AddAttachmentMessageProcessor" doc:name="Custom Processor"/>  

<cxf:proxy-service namespace="urn:greeter:GreeterResponder:1" 
     service="GreeterResponderService" payload="body" 
     wsdlLocation="schemas/interactions/GreeterInteraction/GreeterInteraction_1.0.wsdl" 
     enableMuleSoapHeaders="false" doc:name="SOAP"> 


<cxf:outInterceptors> 
<spring:bean id ="copyAttachment" class="org.mule.module.cxf.support.CopyAttachmentOutInterceptor"/> <!-- SOAP Attachment --> 

</cxf:outInterceptors> 
</cxf:proxy-service> 


<mulexml:xslt-transformer 
     maxIdleTransformers="2" maxActiveTransformers="5" 
     outputEncoding="UTF-8" doc:name="Transform from outer to inner" 
     xsl-file="transform-outer2inner.xslt" encoding="UTF-8" 
     returnClass="java.lang.String"/> 
<cxf:proxy-client payload="body" enableMuleSoapHeaders="true"/ > 
    <http:outbound-endpoint exchange-pattern="request-response" 
     address="http://localhost:8080/alfresco/cmisws/ObjectService" doc:name="HTTP" /> 
</flow> 

et la classe java est la suivante, il prend le chemin de fixation du fichier de propriétés: -

package com.test.services.schema.SOAPOptionalData; 

import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Properties; 

import javax.activation.DataSource; 

    import org.apache.axiom.attachments.ConfigurableDataHandler; 
    import org.apache.cxf.attachment.*; 
    import org.apache.cxf.message.Attachment; 
    import org.mule.api.MuleEvent; 
    import org.mule.api.MuleException; 
    import org.mule.api.processor.MessageProcessor; 
    import org.mule.module.cxf.CxfConstants; 
    import org.mule.util.IOUtils; 

    import com.sun.istack.ByteArrayDataSource; 
    import com.test.services.schema.maindata.v1.Impl.MainDataImpl; 

    public class AddAttachmentMessageProcessor implements MessageProcessor 
    { 

     Properties prop = new Properties(); //Creating property file object read File attachment path from property file 
     InputStream input = null; // To read property file path 

     @Override 
     public MuleEvent process(MuleEvent event) throws MuleException 
     { 




      Collection<Attachment> attachments = new ArrayList<Attachment>(); 

      AttachmentImpl attachment = new AttachmentImpl("1"); 
      String attachmentXML = ""; 

      try 
      { 

       input = getClass().getResourceAsStream("/conf/DBConnectionProp.properties"); // Property file path in classpath 
       prop.load(input); // get and load the property file 

       attachmentXML = IOUtils.getResourceAsString(prop.getProperty("Attachment_File"), this.getClass()); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 

      DataSource source = new ByteArrayDataSource(attachmentXML.getBytes(), "text/xml"); 

      attachment.setDataHandler(new ConfigurableDataHandler(source)); 

      attachments.add(attachment); 


      event.getMessage().setInvocationProperty(CxfConstants.ATTACHMENTS, attachments); 
      return event; 
     } 


    } 

note: - rappelez-vous de modifier votre XSLT de réponse selon elle ... Lorsque vous testez dans l'interface utilisateur SOAP, vous trouverez le fichier joint en réponse

+0

-t-il résolu votre problème? ? –