私は、opentravel.org OTA XMLリクエストを受け入れてそれに応じて応答するTomcat Webサービスを持っています。 JibX OTAクラスを使用します。JibX WSからSOAPヘッダーにアクセス
これまでのところ、サービスのユーザーはPOXを使用していましたが、実際にはうまくいきましたが、新しいユーザーはSOAPヘッダーにSOAPヘッダーにセキュリティ資格情報を追加する必要がありました。 ..
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org /wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>USERNAME</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401- wss-username-token-profile-1.0#PasswordText">SECRET</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
だから私は、私はサービス実装クラス内からヘッダにアクセスする必要があると思うの要求を認証します。
私はSOAPヘッダーの例をチェックしました。私は、ヘッダーにはinContextも含めてアクセスできることを伝えています。
public RoomListRS list(RoomListRQ roomListRQ, InContext inCtx){
....
}
ので、このメソッド内で、私はこれを行うことができます...
Security security = (Security) inCtx.getAttribute("security");
ので、私は、トークン内の
に、ユーザー名にアクセスすることができます...サービスでこれを指定しました...
<service name="OTAService">
<service-class>com.xx.webservice.ota.HotelServiceImpl</service-class>
<operation method="list"/>
<handler-class class="org.jibx.ws.io.handler.ContextAttributeUnmarshallingInHandler">
<constructor-arg value="com.xx.shared.soap.security.Security"/>
<constructor-arg value="security"/>
</handler-class>
</service>
これは正しいですか?
私はSecurityクラスを作成しましたが、ヘッダー内の何かにアクセスできることを証明するために、すべての名前空間の項目を残しました。 ...このようなフラグメントを有することに基づいて
<Security>
<UsernameToken>
<Username>USERNAME</Username>
<Password>SECRET</Password>
</UsernameToken>
</Security>
は、だから私はbindgenとの結合を作成し、コンパイルされ、その後、あるsoapUI
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.opentravel.org/OTA/2003/05">
<soapenv:Header>
<Security>
<UsernameToken>
<Username>USERNAME</Username>
<Password>SECRET</Password>
</UsernameToken>
</Security>
</soapenv:Header>
<soapenv:Body>
<OTA_HotelRoomListRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="2.0">
....
</OTA_HotelRoomListRQ>
</soapenv:Body>
</soapenv:Envelope>
でそれを呼び出したが、私はからのセキュリティオブジェクトを取得しようとすると、コンテキストはnullです。
スティックの端が間違っていませんか?
SOAPYを使用して別のエンドポイントで別のサービスを作成してください。
JibX WSとinHandlerではできないことがありますか?
コメントは大歓迎です。
私の質問にお答えすることが大変ありがとうございます。
あなたが追加したものを通過しようとしています。あなたのカスタマイズとxsdを使ってjavaソースとbinding.xmlを作成しました。
私はクラスをコンパイルしていると私は今、それらをバインドしようとしていますが、私はこのエラーを取得しています:
C:\Java\wsse>java org.jibx.binding.generator.BindGen org.oasisopen.docs.wss.oasis200401wsswssecuritysecext1.SecurityHeaderType
Exception in thread "main" java.lang.IllegalStateException: No way to handle type java.lang.Object, referenced from org.oasisopen.docs.wss.oasis200401wsswssecuritysecext1.SecurityHeaderType
at org.jibx.binding.generator.BindGen.expandReferences(BindGen.java:227)
at org.jibx.binding.generator.BindGen.findReferences(BindGen.java:1010)
at org.jibx.binding.generator.BindGen.generate(BindGen.java:1124)
at org.jibx.binding.generator.BindGen.main(BindGen.java:1302)
私はそれがどんな光を投げかけているかどうかを確認するためにbindgenのカスタマイゼーションを見てみるつもりです、これがこの問題に対応した唯一の手がかりです。あなたはこの周りにどのようにしているのか教えていただけますか?
もう一度おねがいします。
他に誰もこれをしなければなりませんでしたか?私だけですか? – iainmac999