문제

CXF를 사용하여 웹 서비스를 노출하고 있습니다. 나는 마샬링/unmarshalling 동안 객체 그래프의 참조 무결성을 유지하기 위해 @xmlid 및 @xmlidref jaxb 주석을 사용하고 있습니다.

WSDL에는 xs : id 및 xs : idref 속성이있는 요소가 포함되어 있습니다.

서버 측면에서 모든 것이 정말 잘 작동합니다. @xmlidref로 주석이 달린 유형의 인스턴스는 @xmlid 주석으로 주석이 달린 인스턴스와 동일한 인스턴스입니다.

그러나 wsdltojava로 클라이언트를 생성 할 때 참조 (@xmlidref로 주석이 달린 참조)는 java.lang.object 유형입니다.

참조 유형이 java.lang.string (참조 유형의 ID와 일치 함)이거나 참조 된 유형 자체와 동일하도록 JAXB 바인딩을 사용자 정의 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책 3

좋아, 그래서 이것은 작동하지 않을 것입니다. 스키마가 참조 유형을 지정할 수없고 IDREF가 다른 복잡한 유형을 가리키는 것이있을 수 있기 때문에 JAXB가 IDREF에 대한 올바른 유형으로 코드를 생성 할 수 없습니다. JAXB는 참고 문헌의 유형이 무엇인지 어떻게 알 수 있습니까? XML 스키마로의 확장이 가능합니다! :)

다른 팁

인라인 JAXB 바인딩을 사용하여 사용할 유형을 표시하십시오. 그런 다음 JAXB 생성 코드는 올바른 유형을 갖습니다.

<complexType name="Column">
    <sequence>
        <element name="name" type="string" maxOccurs="1" minOccurs="1"></element>
        <element name="referencedColumn" type="IDREF" maxOccurs="1" minOccurs="0">
            <annotation>
                <appinfo>
                    <jaxb:property>
                        <jaxb:baseType name="Column"/>
                    </jaxb:property>
                </appinfo>
            </annotation> 
        </element>
    </sequence>
    <attribute name="id" type="ID" use="required"></attribute>
</complexType>

또한 선언해야합니다 jaxb 네임 스페이스 및 JAXB 버전 schema 요소.

<schema targetNamespace="http://example.com/schema" 
    elementFormDefault="qualified" 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    jaxb:version="1.0">

다음은 XS : IDREF의 요소/속성에 대한 적어도 문자열 속성을 만드는 것으로 보입니다. 좋은 시작이지만 이상적으로 JAXB는 참조되는 요소와 동일한 유형의 속성을 생성합니다. 어떻게 해야하는지 확인하면 다시보고하겠습니다. 이 결과는 수치심이 될 내 자신의 변환기를 작성해야한다는 것을 나타낼 수 있습니다.

<jxb:bindings version="2.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <jxb:globalBindings>
            <jxb:javaType name="java.lang.String" xmlType="xs:IDREF" parseMethod="javax.xml.bind.DatatypeConverter.parseString" printMethod="javax.xml.bind.DatatypeConverter.printString" />
        </jxb:globalBindings>
</jxb:bindings>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top