java - JAXB 解码问题

标签 java xml unmarshalling jaxb2

我必须在 Java 对象中解析以下 xml:

<ArrayOfTranslateArrayResponse xmlns="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<TranslateArrayResponse>
    <From>it</From>
    <OriginalTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:int>5</a:int>
    </OriginalTextSentenceLengths>
    <TranslatedText>Mom</TranslatedText>
    <TranslatedTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:int>3</a:int>
    </TranslatedTextSentenceLengths>
</TranslateArrayResponse>
<TranslateArrayResponse>
    <From>it</From>
    <OriginalTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:int>4</a:int>
    </OriginalTextSentenceLengths>
    <TranslatedText>Dad</TranslatedText>
    <TranslatedTextSentenceLengths xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:int>3</a:int>
    </TranslatedTextSentenceLengths>
</TranslateArrayResponse>

这是我实现的两个类:

@XmlRootElement(name="ArrayOfTranslateArrayResponse")
@XmlAccessorType(XmlAccessType.FIELD)
@Getter
@Setter
@ToString
public class TranslateResponse {

    @XmlElement(name="TranslateArrayResponse")
    private LinkedList<TranslatedResponseObject> translations;

}

@XmlAccessorType(XmlAccessType.FIELD)
@Getter
@Setter
@ToString
public class TranslatedResponseObject {

    @XmlElement(name="TranslatedText")
    private String translatedText;


}

通过对提供的 xml 示例进行解码,我收到了字段翻译的 null 值。怎么了?

最佳答案

感谢 @klonq 调试问题的建议,我已经找到了解决方案。有必要在每个 @XmlElement 和 @XmlRootElement 上添加命名空间,如下所示:

@XmlRootElement(name="ArrayOfTranslateArrayResponse", namespace="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2")
@XmlAccessorType(XmlAccessType.FIELD)
@Getter
@Setter
@ToString
public class TranslateResponse {

    @XmlElement(name="TranslateArrayResponse", namespace="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2")
    private LinkedList<TranslatedResponseObject> translations;

}

@XmlAccessorType(XmlAccessType.FIELD)
@Getter
@Setter
@ToString
public class TranslatedResponseObject {

    @XmlElement(name="TranslatedText", namespace="http://schemas.datacontract.org/2004/07/Microsoft.MT.Web.Service.V2")
    private String translatedText;


}

关于java - JAXB 解码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47930476/

相关文章:

java - 如何修复 list.contains(object) 不返回好的 boolean 变量

java - 使用 Webfilter 时 Keycloak 刷新过期 token

java - 实例化使用 <Foo extends Bar<Foo>> 的通用对象

json - Flutter Dart Http XML rest转换为Json

java - 编码将 jlist 的菜单项保存到 XML 并解码加载菜单项

java - 使函数中的逻辑递归

c# - 如何读取和修改 XML 文件中的数据?

android - 以编程方式添加布局android

java - 如何将一个xml元素绑定(bind)到一个对象成员变量中?

json - 解码 json 以反射(reflect)结构