2012-06-03 17 views
55

私は数日間Jerseyを使用してREST Webサービスを開発していましたが、XML、 JSON、Google Protobuf。WADL /生成されたXSDとJerseyを使用したコントラクトファーストのアプローチ

しかし、私はWADLとXSDの自動生成に関するいくつかの問題に直面しています。私は私を生成し、私が書いたXSDから

  • :オブジェクトを定義するために


    コンテキスト

    は、これらの3つの形式で交換し、私は「コントラクトファースト」のアプローチを踏襲していますJAXBを使用したモデルクラス。

  • 私が書いたのと同じprotoファイルから、私はGoogle Protobufクラスを生成しました(そして、内部的に、これをJAXB生成オブジェクトに変換して1つのユニークなモデルにする方法があります)。

しかし、私は私のユーザーが自分のクラスすぎを生成にできるようにしたいと思いとして、私はこれらのスキーマファイル(の.xsdと.proto)を共有したいと思いますし、自動的に生成されたとよく統合され、それらを持っていますWADL。そのために

this Wikiページへの感謝:

  • 私は
    • /schema/schema.xsd
    • /schema/schema.proto
  • 下の2つのファイルを公開している私は、用途向けに追加されました文法ファイル:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <grammars xmlns="http://wadl.dev.java.net/2009/02" 
          xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
          xmlns:xi="http://www.w3.org/1999/XML/xinclude"> 
        <include href="../schema/schema.xsd" /> 
    </grammars> 
    
  • 私は、カスタマイズされたWADLジェネレータを追加しました:

    public class RichWadlGeneratorConfig extends WadlGeneratorConfig { 
        @Override 
        public List<WadlGeneratorDescription> configure() { 
         return generator(WadlGeneratorApplicationDoc.class) 
          .prop("applicationDocsStream", "application-doc.xml") 
          .generator(WadlGeneratorGrammarsSupport.class) 
          .prop("grammarsStream", "application-grammars.xml") 
          .descriptions(); 
        } 
    } 
    

私は/rest/application.wadlヒット下記WADLに表示されます。この方法で、:

<grammars> 
    <include href="../schema/schema.xsd"/> 
    <include href="application.wadl/xsd0.xsd"> 
      <doc title="Generated" xml:lang="en"/> 
    </include> 
</grammars> 

問題

/rest/application.wadl/xsd0.xsdは私のクラスから自動的に生成されますが、かなりとは全く異なります。schema.xsdのものです。このWADL上wadl2javaのようなツールを呼び出すことに加えて は、

  • /rest/application.wadl/xsd0.xsd
  • は今(同じオブジェクトのための2つの定義を)矛盾している、無残おそらく

    • /schema/schema.xsd、および
    • を失敗しました。


      質問
      1. この自動的に生成されたXSDの生成と拡散を無効にする方法はあり

      ?そうでない場合

    • (私は、この「コントラクトファースト」のアプローチを以下のよ以来、私はそれを必要としないとして)/rest/application.wadl/xsd0.xsdがヒットしたとき 、道は「オーバーライド」私の手で書かれたXSDとそのコンテンツがありますか?


    • あなたの助けを事前に感謝を(私の周りGoogleで検索してWadlResourceについて見つけ、カスタマイズされたWADLを生成するが、XSD生成自体については何も見つかりませんでした)!

      M.


      編集

      1)私は、ジャージーチームに問題を提起し、返信ました: http://java.net/projects/jersey/lists/users/archive/2012-06/message/8

      2)私は、チケット(JERSEY-1230)を調達、パベルの指示に従って。 私は現在、自分自身で修正を提出するか、Jerseyチームから修正を受けることにしています。

    +2

    の問題が修正されました。http://java.net/jrow/browse/JERSEY-1230 –

    +0

    あなた自身の質問への回答として上記を投稿し、それを受け入れる必要があります(返信されていないQのリスト)。 – scottb

    答えて

    1

    1.14-SNAPSHOTすることで、これを実行できるようにする必要があります。

    overrideGrammarsがtrueに設定されている
    public class SampleWadlGeneratorConfig extends WadlGeneratorConfig { 
    
        @Override 
        public List<WadlGeneratorDescription> configure() { 
         return generator(WadlGeneratorApplicationDoc.class) 
           .prop("applicationDocsStream", "application-doc.xml") 
           .generator(WadlGeneratorGrammarsSupport.class) 
           .prop("grammarsStream", "application-grammars.xml") 
           .prop("overrideGrammars", true)        // !!! 
           .generator(WadlGeneratorResourceDocSupport.class) 
           .prop("resourceDocStream", "resourcedoc.xml") 
           .descriptions(); 
        } 
    
    } 
    

    は、ジャージーは文法が返さWADLには含まれません生成されました。

    関連する問題