【问题标题】:Mule - Transforming from Xml string to Object classMule - 从 Xml 字符串转换为 Object 类
【发布时间】:2015-08-26 19:11:38
【问题描述】:

我正在尝试从传入的 XML 字符串生成一个对象。这是传入的有效负载,在将其从字节数组转换为对象后显示为 java.string:

<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ContainerName="http://xxx.blob.core.windows.net/123/">
<Blobs>
<Blob>
<Name>stuff.csv</Name><Url>http://xxx.blob.core.windows.net/123/location.csv</Url><LastModified>Tue, 25 Aug 2015 18:19:58 GMT</LastModified><Etag>0x8D2AD79C8DFFFFF</Etag>
<Size>177</Size>
<ContentType>application/octet-stream</ContentType>
<ContentEncoding /><ContentLanguage />
</Blob>
</Blobs>
<NextMarker />
</EnumerationResults>"

我创建了一个类,我试图用它来映射上面的内容:

public class EnumerationResults implements java.io.Serializable{
    static final long serialVersionUID = 1;

    private List<Blob> Blobs;
    private String NextMarker;

    private String ContainerName;

    public EnumerationResults(){} 

    public List<Blob> getBlobs() {
        return Blobs;
    }
    public void setBlobs(List<Blob> Blobs) {
        this.Blobs = Blobs;
    }

    public String getNextMarker(){
        return NextMarker;
    }
    public void setNextMarker(String NextMarker){
        this.NextMarker = NextMarker;
    }
}

使用 Xml 到 Object 转换器或 XML 到 JAXB 转换器,但是得到了:

org.mule.api.transformer.TransformerMessagingException: 枚举结果 (com.thoughtworks.xstream.mapper.CannotResolveClassException)。信息 有效载荷的类型:字符串

有人能告诉我改变这种情况的最佳方法是什么吗? 我也尝试过对象到 JSON,然后尝试将 JSON 映射到 java 类,但映射器通过错误。

感谢您的任何意见。

【问题讨论】:

  • 更新:看来真正的问题是,当数据通过来自 Azure 的 RestApi 调用传入并通过 Dom 到 Xml 转换器从 BufferInputStream 转换为 Xml 时,它的类型为“java.xml”。 lang.string”。我已经尝试过各种替代的初始转换器,它们都导致“java.lang.string”从那一刻开始转换到一个对象被阻止......它出现了。

标签: xml jaxb mule transform


【解决方案1】:

最终使用这些流程步骤找到了解决此问题的方法:

  • 使用 dom 到 xml 转换器
  • xml 到 json 转换器
  • JSON 到对象,返回类为“java.util.Map”

我怀疑这是最好的解决方案,但现在可以了。

【讨论】:

    【解决方案2】:

    如果您使用 mule 3.7,请使用数据编织进行转换,或者使用数据映射器

    【讨论】:

    • 数据编织似乎根本无法识别“EnumerationResults”节点。似乎标头 ("") 混淆了转换器。
    【解决方案3】:

    如果 datamapper 和 dataweave 不是您的选择(可能是您的社区版),请尝试将您的 XML 映射到 JAXB Object

    Mule 有 XML 到 JAXB Object transformer 你可以使用。您只需要创建 JAXB 对象类。

    带有 JAXB 注释的示例类

    @XmlRootElement(name = "person")
    @XmlAccessorType(XmlAccessType.FIELD)
    public class Person
    {
        private String name;
        private String dob;
    
        @XmlElementWrapper(name = "emailAddresses")
        @XmlElement(name = "emailAddress")
        private List<EmailAddress> emailAddresses;
    
        public String getName() { return name; }
    
        public void setName(String name) { this.name = name; }
    
        public String getDob() { return dob; }
    
        public void setDob(String dob) { this.dob = dob; }
    
        public List<EmailAddress> getEmailAddresses() { return emailAddresses; }
    
        public void setEmailAddresses(List<EmailAddress> emailAddresses) { this.emailAddresses = emailAddresses; }
    }
    

    您可以通过xjc 命令从 XSD 创建 JAXB 类。

    【讨论】:

    • 是的,我就是这么想的,我试过了..但组件似乎根本无法识别传入的 xml 流格式,它只是抛出。
    • 您的 XML 是否来自 SOAP 调用?您是否尝试过先将 DOM 添加到 XML 中?
    • 它是对 Azure Blob 存储的 Rest 调用,是的,我将 DOM 转换为 XML。上面的 XML 是 DOM 到 XML 转换器之后的负载。
    猜你喜欢
    • 2020-03-15
    • 2017-07-22
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多