我有两个类似的模式,对于某些元素,它们具有相同的结构,但是在不同的名称空间下定义。在为第二个模式生成类时,有没有办法为第一个模式重用JAXB生成的类?我知道jaxb允许绑定自定义,但是我无法确定同一组类是否可以与两个名称空间一起使用同时。更具体地说:
Schema1
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns="ns1" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="ns1">
<xs:element name="Document" type="Document"/>
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="Root1" type="Root1Type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Root1Type">
<xs:sequence>
<xs:element name="Child" type="ChildType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ChildType">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="MndtId" type="Max35Text"/>
<xs:element name="MndtReqId" type="Max35Text"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Max35Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
SCHEMA2
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xs:schema xmlns="ns2" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="ns2">
<xs:element name="Document" type="Document"/>
<xs:complexType name="Document">
<xs:sequence>
<xs:element name="Root2" type="Root2Type"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="Root2Type">
<xs:sequence>
<xs:element name="Child" type="ChildType"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ChildType">
<xs:sequence>
<xs:element maxOccurs="1" minOccurs="0" name="MndtId" type="Max35Text"/>
<xs:element name="MndtReqId" type="Max35Text"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="Max35Text">
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="35"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
xjc将为第一个模式生成:
ns1/ChildType.java
ns1/Document.java
ns1/ObjectFactory.java
ns1/Root1Type.java
ns1/package-info.java
和第二个:
ns2/ChildType.java
ns2/Document.java
ns2/ObjectFactory.java
ns2/Root2Type.java
ns2/package-info.java
我想知道的是,在为第二个模式生成类时,是否可以重用为第一个模式生成的ChildType。
由于
答案 0 :(得分:0)
当您有多个只有目标名称空间不同的XML模式时,这将有效。
从其中一个XML架构(即具有目标命名空间ns
的架构)生成模型。
对于任何直接对应于您用于生成Java模型的XML模式的XML,您可以对其进行编组/解组
当您处理与具有命名空间XMLFilter
的架构相对应的XML文档时,可以在解组时应用SAX ns2
,就好像它对应于具有命名空间{{1的架构的模式}}
ns1
演示代码
以下是一些示例代码,演示了如何应用import org.xml.sax.*;
import org.xml.sax.helpers.XMLFilterImpl;
public class NamespaceFilter extends XMLFilterImpl {
private static final String NAMESPACE = "ns1";
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(NAMESPACE, localName, qName);
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes atts) throws SAXException {
super.startElement(NAMESPACE, localName, qName, atts);
}
}
。
XMLFilter
TBD