cocos2d-xなどなどいろいろやってますこの広告は、90日以上更新していないブログに表示しています。3)contract-firstなWebサービス開発を行う際は、実際に送受信されるXMLメッセージ構造を意識することが最も重要。XMLメッセージ構造ここでは、休暇申請情報を表す以下のXMLメッセージ*1を例とする。Schemaを利用してXMLデータを定義する。</xs:complexType></xs:schema>サービス定義(WSDL)Spring-WSでは、WSDLの作成は必須ではない。Schemaの定義といくつかのコンフィギュレーションにより、Spring-WSが代わりにWSDLを公開してくれるからである。ここでは、手作業でWSDLを作成した場合の記述例を示す。</wsdl:service></wsdl:definitions>プロジェクトの作成ここでは、Maven2*2を利用したプロジェクトを作成する。-DartifactId=holidayService上記のコマンドにより、holidayServiceディレクトリが作成される。続けて"/src/main/webapp"ディレクトリ配下の"WEB-INF/web.xml"を以下の内容に編集する。</servlet-mapping></web-app>また、"WEB-INF/spring-ws-servlet.xml"ファイル*3も合わせて作成しておく。このファイルには、Spring-WSで利用するBeanを定義していく。エンドポイントの実装Spring-WSでは、受け取ったXMLメッセージをハンドリングするため、以下のいずれかのエンドポイントを実装する必要がある。endpointsSOAPヘッダを含む全てのXMLメッセージをハンドリングできる。endpointsSOAPボディ内のXMLメッセージをハンドリングできる。endpointsを実装する。endpointsの実装例である*4。endpointsを実装する場合は、AbstractJDomPayloadEndpointを継承したクラスを実装する。Frameworkのコンストラクタ・インジェクションを利用して実装クラスの参照を渡すことができる。invokeInternal()はテンプレートメソッドであり、引数のelementには要素のXMLメッセージが渡される。受け取ったElementに対しては、JDomを利用して自由に操作できる。invokerInternal()の戻り値はElementとなっているが、サービスのレスポンスが存在する場合は、XMLメッセージ作成して返す必要がある。ここでは、サービスのレスポンスはないため、nullを返している。以下は、上記の実装を行うためのMaven2のpom.xmlファイルの例である。endpoints実装をSpring-WSの設定ファイル(spring-ws-servlet.xml)に記述する。class="com.mycompany.hr.service.StubHumanResourceService"/></beans>とは、作成した実装クラスをSpring-WSに登録するための記述である。メッセージのルーティング設定を行うため、以下の記述も追記する。</bean>この設定により、"http://mycompany.com/hr/schemas"名前空間のメッセージを受け取った場合は、holidayEndpointへとメッセージがルーティングされる。WSDLを公開するために、さらに以下の記述も追記する*5。</bean></beans>以上より、http://localhost:8080/holidayService/holiday.wsdlにアクセスすることでWSDLが取得可能となる。http://localhost:8080/holidayService/でサービスを実行できる*6。installを実行してWARファイルを作成し、TomcatなどのAPサーバにデプロイすることで実行可能となる。*1:のように、1つのルートエレメントで囲んだメッセージ形式をwrappedパターンと呼ぶ。*2:Maven2についてはMaven2のTipsを集めるWikiなどを参考に。*3:で指定した名前の後ろに-servlet.xmlを付けたファイル名となる。読者になる検索リンクはてなブログブログをはじめる週刊はてなブログはてなブログPro最新記事ISUCON9予選に参加しました月別アーカイブスポンサーリンクはてなブログをはじめよう!matsukazさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。