2011-03-30 11 views
2

wsimportを使用しているときに、インポートされたXSDをWSDL内でJAXBバインディングとして指定するにはどうすればよいですか?インポートされたXMLスキーマのJAXBとJAXWSの結合

「xs:element [@ name = 'isFoobar']のXPath評価によって空のターゲットノードが生成される」というエラーが発生しました。

<?xml version="1.0" encoding="UTF-8"?> 
<jaxws:bindings xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" wsdlLocation="example.wsdl" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> 
    <jaxws:bindings node="wsdl:definitions"> 
     <jaxws:bindings node="wsdl:types" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> 
      <jaxws:bindings 
       node="//xs:schema[@targetNamespace='http://www.example.org/']"> 
       <jaxb:globalBindings> 
        <xjc:serializable uid="10000001" /> 
       </jaxb:globalBindings> 
       <jaxb:bindings 
        node="//xs:element[@name='isFoobar']"> 
        <jaxb:typesafeEnumClass name="IsFoobar"> 
         <jaxb:typesafeEnumMember value="01" name="TRUE" /> 
         <jaxb:typesafeEnumMember value="02" name="FALSE" /> 
        </jaxb:typesafeEnumClass> 
       </jaxb:bindings> 
      </jaxws:bindings> 
     </jaxws:bindings> 
    </jaxws:bindings> 
</jaxws:bindings> 

+0

あなたは何をしたいのかを見つける方法はありますか?興味ある。 – Thomas

答えて

1

私は似てとっくの昔何かをした、私はあなたが以下のようにXPathのを選択するために、ノードを指定する必要があると思う:

//xs:element[@name='isFoobar']/xs:complexType 

またはxsを交換する:あなたはここで使用されているタイプのどんな種類でのcomplexType。うまくいけば、それはあなたの問題を解決します。

+0

私はそれをテストする時間がありませんでした。それにもかかわらず、他の提案はないので、私はそれを受け入れます。 –

+0

よく、テストなしで受け入れると他の人に誤解を招く恐れがあります –

1

これを解決しようとする私の最初の試みは、何とかXPathまたは複数のjxb:binding要素を使用しようとしていたが、うまくいかなかった。私が知っている限り、XPathはインポートされたスキーマに対して正しく検証されません。すべてがDOMと一緒に書き換えられ、マッシュされない限りです。

この問題を解決する方法は、インポートされたXSDでinline customizationsを使用することでした。私は複数のネストされたインポートでこのアプローチをテストしませんでしたが、アクセスして、インポートされたすべてのXSDを修正する時間があれば、これはうまくいくはずです。私の意見では、マッピングを生成する必要がある場合にのみ必要です。マッピングが完了したら、XSDからスクラブ/削除できます。

1

私はこの問題に遭遇しました。これは、さまざまなキーワードの組み合わせでGoogleに表示された最初の回答の1つですが、私は使い終わった回答を保持していませんでした。インポートされたスキーマの


、WSDL内にインポートXSDに結合JAXBを指定する最も簡単な方法はある...完全に別のスキーマとして、それを処理するために!

ショート例:

が(それは、ネストされた輸入私のWSDLのまたは内のルートにあります天気を)

<xsd:schema targetNamespace="whatever" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xs:complexType name="ThingThatNeedsToBeBound"> 
     <!-- Whatever this is made of --> 
    </xs:complexType> 
</xsd:schema> 

このXSDがインポートされてどんなにをMyXSD.xsd、すべてのI私のカスタムバインディングで私の「ThingThatNeedsToBeBound」をバインドする記述する必要があることです。

customBindings.xml

<jaxb:bindings schemaLocation="Path/To/MyXSD.xsd" node="/xs:schema/xs:complexType[@name='ThingThatNeedsToBeBound']"> 
    <!-- your custom binding --> 
</jaxb:bindings> 

したがって、通常の場合と同じですが、schemaLocationを指定する点が異なりますが、インポートされたスキーマを何かの一部ではなく全体として考えることができます。

これは、この問題を抱えている他の人に役立つことを願っています。


出典:http://www.oracle.com/technetwork/articles/grid/jax-ws-jaxb-customization-082750.html

が(注:ソースで、解決策は、道より複雑なようで、私の場合は、彼らが説明するものよりも簡単だったかもしれないので、私はそのどれもが、あまり使用して私の解決策を見つけました!)

+0

私はそれをテストすることはできませんが、それは合理的に聞こえます。 StackOverflowにnecro-threadingというものはありません。質疑応答は最新のものにしてください。 :-) –

関連する問題