使用 JAVA (MULE) 访问负载
Accessing Payload using JAVA (MULE)
我目前正在使用 MULE 处理流程,我需要使用 java class 获取一些信息。要进行一些验证、转换然后调用 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 class 这里:
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 将信息存储到有效载荷中?
您可以选择两个选项之一,从 Java 代码中获取存储在 <type:Data>
中的信息。
将 POST 数据解析为 XML 文档,在 Java 代码内:
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();
使用XPATH提取需要的数据,存储在变量中,然后在Java代码中进行:
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
String typeData = message.getInvocationProperty("variableName");
我目前正在使用 MULE 处理流程,我需要使用 java class 获取一些信息。要进行一些验证、转换然后调用 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 class 这里:
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 将信息存储到有效载荷中?
您可以选择两个选项之一,从 Java 代码中获取存储在 <type:Data>
中的信息。
将 POST 数据解析为 XML 文档,在 Java 代码内:
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();
使用XPATH提取需要的数据,存储在变量中,然后在Java代码中进行:
public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException { String typeData = message.getInvocationProperty("variableName");