2013-10-24 6 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がスキーマの1つに存在しないときは、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

関連する問題