2013-10-24 5 views
5

여러 스키마가있는 WSDL의 사용자 지정 javaTypes를 사용하는 데 문제가 있습니다. 바인딩은 주어진 네임 스페이스가있는 스키마에서 작동하지만 네임 스페이스가없는 스키마에서는 컴파일이 실패합니다. 여러 스키마가있는 WSDL의 사용자 정의 구문 분석 및 인쇄 메서드

은 bindings.xml 파일입니다 : 내가 CXF-CODEGEN - 플러그인을 사용하고

<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      xmlns:common="urn:my:ns"> 
<jaxb:globalBindings generateElementProperty="false"> 
    <jaxb:serializable uid="1"/> 
    <jaxb:javaType name="java.util.Date" xmlType="xs:date" 
        parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate" 
        printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate"/> 
    <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" 
        parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" 
        printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/> 
    <jaxb:javaType name="java.util.UUID" xmlType="common:uuid" 
        parseMethod="my.package.UuidConverter.parse" 
        printMethod="my.package.UuidConverter.print"/> 
</jaxb:globalBindings> 
</jaxb:bindings> 

오류 메시지는 다음과 같습니다 정의되지 않은 단순 유형

이 가능하다 urn : my : ns가 스키마 중 하나에 없을 때 UUID 바인딩을 무시합니까? 또는 다른 방법을 사용하여이 바인딩을 보관할 수 있습니까?

+0

실패한 스키마가 의존하는 다른 단순 유형에 대한 바인딩이 누락되지 않았습니까? 다른 말로하면, 그들은'common : uuid'에 의존하지 않을 수도 있지만, 여러분이 놓친 또 다른 간단한 유형에 의존 할 수 있을까요? – J0e3gan

+1

@ J0e3gan 아니요, 그렇게 생각하지 않습니다. 맞춤 구문 분석기/프린터를 켜고 끄는 것으로 확인했습니다. – Vegard

답변

1

설명과 같이 UUID 바인딩을 조건부로 무시할 수 있다고 생각하지 않습니다. 그리고 나는 당신이 "이 바인딩을 보관할 수 있는지"묻는 것으로 당신이 의미하는 것을 따를 지 확신하지 못합니다.하지만 나는 그렇지 않다는 것을 느낍니다.

UUID은 일반적으로 xs:string으로 변환되어 discussed in the Java forums입니다. JAX-B documentation도이 매핑을 확인합니다. (그냥 링크 된 문서 페이지에서 UUID를 검색합니다.)

이 대신 같은 것을 생각해 보면 여전히 문제가 있다면

<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<jaxb:globalBindings generateElementProperty="false"> 
    <jaxb:serializable uid="1"/> 
    <jaxb:javaType name="java.util.Date" xmlType="xs:date" 
        parseMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.parseDate" 
        printMethod="org.apache.cxf.xjc.runtime.DataTypeAdapter.printDate"/> 
    <jaxb:javaType name="java.util.Calendar" xmlType="xs:dateTime" 
        parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime" 
        printMethod="javax.xml.bind.DatatypeConverter.printDateTime"/> 
    <jaxb:javaType name="java.util.UUID" xmlType="xs:string" 
        parseMethod="my.package.UuidConverter.parse" 
        printMethod="my.package.UuidConverter.print"/> 
</jaxb:globalBindings> 
</jaxb:bindings> 

related SO answer을 고려하십시오.

+2

내가 원하는대로 작동하지 않을 것이라고 생각합니다. 그 이유는 귀하의 예제가 {http://www.w3.org/2001/XMLSchema}string의 모든 인스턴스를 구문 분석하고 싶기 때문입니다. {urn : my : ns} uuid에 대한 파서를 만들기. 내 원래의 예제는 {urn : my : ns} uuid가있는 단일 스키마에서 사용할 경우 잘 작동합니다. – Vegard

+1

@ 베가 드 명확히 해 주셔서 감사합니다. 미안하지만 좀 더 구체적인 것을 도울 수 없었습니다. – J0e3gan

+1

감사합니다. 또한 joda 클래스 인'DateTime'과 함께 작동합니다. – vikingsteve

관련 문제