【问题标题】:Accessing Payload using JAVA (MULE)使用 JAVA (MULE) 访问 Payload
【发布时间】:2020-08-25 05:42:25
【问题描述】:

我目前正在使用 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 请求。我尝试了很多东西,但我无法正确访问payload信息,如何使用JAVA获取存储到Payload中的信息?

【问题讨论】:

    标签: java soap mule payload


    【解决方案1】:

    您可以选择两个选项之一,以从 Java 代码中获取存储在 &lt;type:Data&gt; 中的信息。

    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");
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-25
      • 2015-06-22
      • 1970-01-01
      • 2014-04-16
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多