使用JAVA(MULE)访问有效负载

时间:2016-07-19 15:40:13

标签: java soap mule payload

目前我正在使用MULE处理流程,我需要使用java类获取一些信息,以便进行一些验证,转换然后在Oracle数据库中调用存储过程,我需要获取信息存储在<type:Data>中,这是流程:

<flow name="INSERT">
    <http:listener config-ref="CONFIG_1" path="/afis/afisInsert" allowedMethods="POST" doc:name="HTTP"/>
    <cxf:proxy-service port="InsertDATA" namespace="http://www.morpho.com/SIIMInterface/" service="InsertService" payload="envelope" wsdlLocation="AFISINSERT.wsdl" doc:name="CXF" configuration-ref="CXF_Configuration"/>
    <component class="Transform" doc:name="Java"/>  
    <logger message="String message : #[payload]" level="INFO" doc:name="Logger"/>      
</flow>

我发送一个具有以下结构的POST请求:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:type="http://XXX/ZZ/WWW/YYY/"> <soapenv:Header/> <soapenv:Body> <input> <type:Data> <type:id>1</type:id> <type:sampleType>?</type:sampleType> <!--Optional:--> <type:tenprint> <type:width>600</type:width> <type:height>800</type:height> <type:format>S</type:format> </type:tenprint> </type:Data> <type:PersonID>123</type:PersonID> <type:Priority>3</type:Priority> </input> <soapenv:Body> </soapenv:Envelope>

我的java课程在这里:

public class CLASE extends AbstractMessageTransformer{

public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {

String mensajeString = new String();    
     try {
        return message.getPayloadAsString();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

创建Mule变量我能够使用XPATH访问xml的节点,在日志中,xml请求被正确打印。我尝试了很多东西,但是我无法正确访问有效负载信息,如何使用代码JAVA将信息存储到Payload中?

1 个答案:

答案 0 :(得分:1)

您可以从两个选项中选择一个,从Java代码中获取<type:Data>中存储的信息。

  1. 将POST数据解析为Java代码中的XML文档:

    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
        BufferInputStream payload = (BufferInputStream) message.getPayload();
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(payload);
    
        String typeData = doc.getDocumentElement().getElementsByTagName("type:Data").item(0).getTextContent();
    
  2. 使用XPATH提取所需数据,将其存储在变量中,然后继续使用Java代码:

    public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
        String typeData = message.getInvocationProperty("variableName");