1

我有一个非常大的 xml,其中包含许多嵌套标签,为此我生成了一个 java 类。

其中一个标签以数字开头<3DSecure></3DSecure>

我必须手动设置这个标签,在我映射到的 Java 中threeDSecure

我知道这违反了 XML 约定,但是否可以覆盖此检查?否则我将不得不删除 JAXB 并手动设置 xml,因为我无法控制需要此 XML 的 API。

解组/编组时出现错误:

[org.xml.sax.SAXParseException: The content of elements must consist of well-formed character data or markup.]
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.createUnmarshalException(AbstractUnmarshallerImpl.java:315)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.createUnmarshalException(UnmarshallerImpl.java:505)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:206)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:173)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:142)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:151)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:169)
4

2 回答 2

1

您可以使用该-nv标志,在从 XML 模式生成类时禁用 XML 模式的验证。

XJC 呼叫

xjc -nv schema.xsd 

XML 模式 (schema.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/schema"
    xmlns:tns="http://www.example.org/schema" 
    elementFormDefault="qualified">

    <complexType name="foo">
       <sequence>
           <element name="3DSecure" type="string"/>
       </sequence>
    </complexType>

</schema>

生成的类(Foo)

package org.example.schema;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "foo", propOrder = {"_3DSecure"})
public class Foo {

    @XmlElement(name = "3DSecure", required = true)
    protected String _3DSecure;

    public String get3DSecure() {
        return _3DSecure;
    }

    public void set3DSecure(String value) {
        this._3DSecure = value;
    }

}
于 2013-08-06T00:34:35.723 回答
0

使用@XmlElement注释的name属性将 Java 类属性绑定为

 @XmlRootElement
 public class JAXBModel {

     @XmlElement(name="3DSecure")
     public String threeDSecure;

     // ...
 }
于 2013-08-05T11:56:30.187 回答