2013-08-05 52 views
1

我有一个非常大的XML与许多嵌套标签,我生成了一个Java类。JAXB xml标签文件以数字开头,可能吗?

一个标签与数<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) 

回答

0

绑定使用@XmlElement标注的属性Java类财产

@XmlRootElement 
public class JAXBModel { 

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

    // ... 
} 
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> 

生成的类(美孚)

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; 
    } 

} 
+0

感谢你的努力,我HAV e已经试过它没有用。但绝不会导致API有一个过时的文档,我不需要这个功能:) – braincell

+0

@braincell - 奇怪听到它不适合你。很高兴听到它没有阻止你。 –

相关问题