java - 无法使用 TransformMessage 组件在 Mule 中转换消息

标签 java xml wsdl mule esb

我无法使用转换消息来转换消息。我的输入是一个按照 wsdl 的 java 对象,输出是 application/xml 。

请求对象的形式如下:

/**
 * PackagingRequest.java
 *
 * This file was auto-generated from WSDL
 * by the Apache Axis 1.4 Apr 22, 2006 (06:55:48 PDT) WSDL2Java emitter.
 */

package packaging;

public class PackagingRequest  implements java.io.Serializable {
    private java.lang.String packagingProduct;

    private java.lang.String packagingID;

    private java.lang.String packagingRequiredDate;

    public PackagingRequest() {
    }

    public PackagingRequest(
           java.lang.String packagingProduct,
           java.lang.String packagingID,
           java.lang.String packagingRequiredDate) {
           this.packagingProduct = packagingProduct;
           this.packagingID = packagingID;
           this.packagingRequiredDate = packagingRequiredDate;
    }


    /**
     * Gets the packagingProduct value for this PackagingRequest.
     * 
     * @return packagingProduct
     */
    public java.lang.String getPackagingProduct() {
        return packagingProduct;
    }


    /**
     * Sets the packagingProduct value for this PackagingRequest.
     * 
     * @param packagingProduct
     */
    public void setPackagingProduct(java.lang.String packagingProduct) {
        this.packagingProduct = packagingProduct;
    }


    /**
     * Gets the packagingID value for this PackagingRequest.
     * 
     * @return packagingID
     */
    public java.lang.String getPackagingID() {
        return packagingID;
    }


    /**
     * Sets the packagingID value for this PackagingRequest.
     * 
     * @param packagingID
     */
    public void setPackagingID(java.lang.String packagingID) {
        this.packagingID = packagingID;
    }


    /**
     * Gets the packagingRequiredDate value for this PackagingRequest.
     * 
     * @return packagingRequiredDate
     */
    public java.lang.String getPackagingRequiredDate() {
        return packagingRequiredDate;
    }


    /**
     * Sets the packagingRequiredDate value for this PackagingRequest.
     * 
     * @param packagingRequiredDate
     */
    public void setPackagingRequiredDate(java.lang.String packagingRequiredDate) {
        this.packagingRequiredDate = packagingRequiredDate;
    }

    private java.lang.Object __equalsCalc = null;
    public synchronized boolean equals(java.lang.Object obj) {
        if (!(obj instanceof PackagingRequest)) return false;
        PackagingRequest other = (PackagingRequest) obj;
        if (obj == null) return false;
        if (this == obj) return true;
        if (__equalsCalc != null) {
            return (__equalsCalc == obj);
        }
        __equalsCalc = obj;
        boolean _equals;
        _equals = true && 
            ((this.packagingProduct==null && other.getPackagingProduct()==null) || 
             (this.packagingProduct!=null &&
              this.packagingProduct.equals(other.getPackagingProduct()))) &&
            ((this.packagingID==null && other.getPackagingID()==null) || 
             (this.packagingID!=null &&
              this.packagingID.equals(other.getPackagingID()))) &&
            ((this.packagingRequiredDate==null && other.getPackagingRequiredDate()==null) || 
             (this.packagingRequiredDate!=null &&
              this.packagingRequiredDate.equals(other.getPackagingRequiredDate())));
        __equalsCalc = null;
        return _equals;
    }

    private boolean __hashCodeCalc = false;
    public synchronized int hashCode() {
        if (__hashCodeCalc) {
            return 0;
        }
        __hashCodeCalc = true;
        int _hashCode = 1;
        if (getPackagingProduct() != null) {
            _hashCode += getPackagingProduct().hashCode();
        }
        if (getPackagingID() != null) {
            _hashCode += getPackagingID().hashCode();
        }
        if (getPackagingRequiredDate() != null) {
            _hashCode += getPackagingRequiredDate().hashCode();
        }
        __hashCodeCalc = false;
        return _hashCode;
    }

    // Type metadata
    private static org.apache.axis.description.TypeDesc typeDesc =
        new org.apache.axis.description.TypeDesc(PackagingRequest.class, true);

    static {
        typeDesc.setXmlType(new javax.xml.namespace.QName("http://www.example.org/Packaging/", "PackagingRequest"));
        org.apache.axis.description.ElementDesc elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("packagingProduct");
        elemField.setXmlName(new javax.xml.namespace.QName("", "PackagingProduct"));
        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
        elemField.setNillable(false);
        typeDesc.addFieldDesc(elemField);
        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("packagingID");
        elemField.setXmlName(new javax.xml.namespace.QName("", "PackagingID"));
        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
        elemField.setNillable(false);
        typeDesc.addFieldDesc(elemField);
        elemField = new org.apache.axis.description.ElementDesc();
        elemField.setFieldName("packagingRequiredDate");
        elemField.setXmlName(new javax.xml.namespace.QName("", "PackagingRequiredDate"));
        elemField.setXmlType(new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"));
        elemField.setNillable(false);
        typeDesc.addFieldDesc(elemField);
    }

    /**
     * Return type metadata object
     */
    public static org.apache.axis.description.TypeDesc getTypeDesc() {
        return typeDesc;
    }

    /**
     * Get Custom Serializer
     */
    public static org.apache.axis.encoding.Serializer getSerializer(
           java.lang.String mechType, 
           java.lang.Class _javaType,  
           javax.xml.namespace.QName _xmlType) {
        return 
          new  org.apache.axis.encoding.ser.BeanSerializer(
            _javaType, _xmlType, typeDesc);
    }

    /**
     * Get Custom Deserializer
     */
    public static org.apache.axis.encoding.Deserializer getDeserializer(
           java.lang.String mechType, 
           java.lang.Class _javaType,  
           javax.xml.namespace.QName _xmlType) {
        return 
          new  org.apache.axis.encoding.ser.BeanDeserializer(
            _javaType, _xmlType, typeDesc);
    }

}

我的骡子流程如下:

<mule xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:ws="http://www.mulesoft.org/schema/mule/ws" xmlns:metadata="http://www.mulesoft.org/schema/mule/metadata" xmlns:dw="http://www.mulesoft.org/schema/mule/ee/dw" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:spring="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ws http://www.mulesoft.org/schema/mule/ws/current/mule-ws.xsd
http://www.mulesoft.org/schema/mule/ee/dw http://www.mulesoft.org/schema/mule/ee/dw/current/dw.xsd
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd">
    <ws:consumer-config name="Web_Service_Consumer" wsdlLocation="wsdl/PackagingSOAP.wsdl" service="Packaging" port="PackagingSOAP" serviceAddress="http://localhost:8080/PackagingProject/services/PackagingSOAP" doc:name="Web Service Consumer"/>
    <flow name="testing_enricher_webserviceFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/testingenricher" doc:name="HTTP"/>
        <logger message="Welcome to the enricher flow.....a packaging service will be called now , " level="INFO" doc:name="Logger"/>
        <component class="testingmulefacets.PackagingList" doc:name="Java"/>
        <custom-transformer mimeType="application/xml" class="testingmulefacets.TransformList" doc:name="Java"/>
        <logger message="payload before transform #[payload]" level="INFO" doc:name="Logger"/>
        <dw:transform-message metadata:id="4a89ba40-6031-4bd8-a515-e09b03a9a1b7" doc:name="Transform Message">
            <dw:set-payload><![CDATA[%dw 1.0
%output application/xml
%namespace ns0 http://www.example.org/Packaging/
---
{



    ns0#PackagingType: {




        PackagingProduct: payload.packagingProduct,



        PackagingID: payload.packagingID

,

        PackagingRequiredDate: payload.packagingRequiredDate
    }
}]]></dw:set-payload>
        </dw:transform-message>
        <logger message="payload after transform #[payload]" level="INFO" doc:name="Logger"/>
        <ws:consumer config-ref="Web_Service_Consumer" operation="NewOperation" doc:name="Web Service Consumer"/>
    </flow>
</mule>

当我这样做时,我收到一个错误,即序言中出现意外字符“p”(代码 112);预期为“<” 在 [row,col {unknown-source}]: [1,1] (com.ctc.wstx.exc.WstxUnexpectedCharException)

我注意到 Transform 消息的输出是 com.mulesoft.weave.mule.WeaveMessageProcessor$WeaveOutputHandler@19e422ef,而不是预期的 xml,但输入是正确的 RequestPackaging 对象。

有人可以帮忙吗?

最佳答案

While I do this I get an error as Unexpected character 'p' (code 112) in prolog; expected '<' at [row,col {unknown-source}]: [1,1] (com.ctc.wstx.exc.WstxUnexpectedCharException)

输入的 xml 格式不正确。它不是以 < 开头如错误所述。您需要jaxb-to-xml-transformer查看

https://docs.mulesoft.com/mule-user-guide/v/3.7/jaxb-transformers

Mule JAXB Object to XML Transformer throwing JAXBException

关于java - 无法使用 TransformMessage 组件在 Mule 中转换消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36478034/

相关文章:

maven - 我如何首先为 apache cxf wsdl 创建一个 maven 项目

java - 将单个十六进制字符转换为其在 java 中的字节值

Java:如何创建一个接受第一个元素的列表的列表 cons

java - 将图像渲染到JPanel的向后兼容性问题上-我在做什么错?

java - 我不知道 JMSExceptions 是什么以及如何处理它们。有人可以向我解释一下吗?

java - maven ant regex 插入 xml 文本

xml - Unix - 将包含 XML 文件的文件拆分为单个文件

java - wsdl文件生成时如何获取字节数组?

php - 循环遍历 XML,仅在特定 ID 处循环 "look"

php - 在同一个 PHP SOAP 服务器中处理对多个类的请求