Мы используем XSD-файл для генерации Java-объекта, но некоторые из них используют объект, сгенерированный из другого XSD, который мы не хотим использовать. Мы хотели бы заменить его в сгенерированном объекте Java простой строкой. Есть ли способ привязать сгенерированный XSD-объект к java-типу с помощью адаптера или чего-то подобного?
Вот пример того, что у нас есть
<xs:schema version = "1.0" elementFormDefault = "qualified" xmlns:xs = "http://www.w3.org/2001/XMLSchema" targetNamespace = "http://example.com/common/task/v1" xmlns:nsCodeValue="http://example.com/soapcommon/basicdatatypes/code-value/v1"> <xs:import schemaLocation="../../../soapcommon/v1/basicdatatypes/code-value.xsd" namespace="http://example.com/soapcommon/basicdatatypes/code-value/v1"/> <xs:complexType name="Task" abstract="true"> <xs:sequence> <!-- Bunch of element --> <xs:element name="TaskReason" type="nsCodeValue:CodeValue" minOccurs="0" /> </xs:sequence> </xs:complexType> </xs:schema>
XSD, который мы хотели бы «связать»
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/soapcommon/basicdatatypes/code-value/v1"> <xs:complexType name="CodeValue"> <xs:sequence> <!-- Bunch of element --> </xs:sequence> </xs:complexType> </xs:schema>
Можем ли мы сделать что-то подобное в Binding.xjb?
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:annox="http://annox.dev.java.net" xmlns:tns="http://esb.tsf.ab.com/enterprise/message" xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" xmlns:nsCodeValue="http://example.com/soapcommon/basicdatatypes/code-value/v1" version="2.1"> <jaxb:globalBindings> <xjc:serializable uid="7702" /> <xjc:javaType adapter="com.example.adapter.CodeValueAdapter" name="java.lang.String" /> </jaxb:globalBindings> </jaxb:bindings>