Mule - 从Xml字符串转换为Object类

时间:2015-08-26 19:11:39

标签: xml jaxb mule transform

我试图从传入的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:   EnumerationResults   (com.thoughtworks.xstream.mapper.CannotResolveClassException)。信息   payload的类型为:String

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

感谢您的任何意见。

3 个答案:

答案 0 :(得分:2)

最后使用以下流程步骤找到了解决此问题的方法:

  • 使用dom到xml转换器
  • xml to json transformer
  • JSON to Object,返回类为&#39; java.util.Map&#39;

我怀疑这是最好的解决方案,但它现在就做了。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

Mule拥有您可以使用的JAXB Object transformer XML。您只需要创建JAXB Object类。

带有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类。