問題タブ [saaj]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - java.util.logging、ResourceBundles、SAAJ: Glassfish OSGi webapp バンドルのロード時の例外
次の例外によって、私は頭から追い出されています。
WAB (Web アプリケーション OSGi バンドル) を Glassfish (3.1.1) にデプロイしようとすると発生します。
ファイルに文字列を入れることによりcom.sun.xml.messaging.saaj...
、古いJDKのもの(これは1つです)ではなく、SAAJ()の最新バージョンを使用しようとしています。com.sun.xml.internal.saaj...
com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl
META-INF/services/javax.xml.soap.MessageFactory
OSGi クラスローディングが開始される前に何らかのロギングが行われているようです。したがって、(SAAJ の の実装) の静的フィールドのResourceBundle
初期化中に「間違った」が返されています。log
com.sun.xml.messaging.saaj.soap.MessageFactoryImpl
javax.xml.soap.MessageFactory
これを見た人はいますか / 提供されている回避策はありますか?
soap - WebLogic で使用される SAAJ パッケージ
SOAP クラスを含むさまざまな SAAJ パッケージがあるため、多くの問題がありました。
com/sun/xml/internal/messaging/saaj/soap/
rt.jarでcom/sun/xml/messaging/saaj/soap/
saaj-impl.jar 内
WebLogic が のクラスを使用し、 のクラスを使用しcom/sun/xml/internal/messaging/saaj/soap/
てアプリケーションを作成すると、アプリケーションcom/sun/xml/messaging/saaj/soap/
のデプロイ時に次のような例外がスローされます。
com.sun.xml.internal.messaging.saaj.soap.LocalStrings != com.sun.xml.messaging.saaj.soap.LocalStrings
また
java.lang.NoClassDefFoundError: com/sun/xml/internal/messaging/saaj/soap/SAAJMetaFactoryImpl
私の解決策は、saaj 参照を使用して weblogic.xml 記述子を作成し、saaj-impl.jar を戦争に含めることでした。質問: WebLogic Server で使用されている SAAJ パッケージを教えてください。
java - Web サービスとしての Java SOAP リクエスト?
背景を説明するために、SOAP を介してサードパーティと対話するクライアントを作成しようとしています。最初に、javax.xml.soap SAAJ を使用してこれを展開し始めましたが、SOAPConnection を作成するときにタイムアウトのオプションがないことに気付きました。
タイムアウトがあるAXISを検討しましたが、回避するように警告されており、パフォーマンスに関してはあまり優れていません。上層部はこれを最後の修復と考えているようです。
javax.xml.ws Web サービス ルートは、それが Web サービスである場合にのみ、コンテキスト プロパティにタイムアウト設定を入れることができるため、うまく機能することを示唆する人もいます。
これが状況です。私がリクエストを送信しているサードパーティには、実際には WSDL ファイルまたは URL がありません。元のアイデアは、SOAP リクエストを作成して送信することでした。SAAJ にタイムアウト設定があればうまく機能したでしょう。 .
だから私は考えているのですが、私の無知を許してください.SAAJ javax.xml.soapメソッドのリクエストを構築する代わりに、Webサービスのような通信をモデル化して実装することはできますか? もしそうなら、誰かが本当に私を指摘できますか?私が見つけたほとんどの文書は、WSDL からのスタブとクラスの生成に依存しているようです。
これはすべて、このサードパーティ SOAP API への接続のタイムアウト設定を設定するためのものです。
また、タイムアウトを設定できる HttpConnection のように扱うことを提案する人もいますが、私が見つけた欠点は、SOAPMessage タイプのオブジェクトを返さなくなったことです。
だから基本的に私はこれを変更しようとしています:
これを行うことができるように、よりWebサービスに似たものにします。
私は javax.ws フレームワークに関する知識が本当に不足しているので、軽く行ってください:)
java - Java7のSpring-WSクライアントからJava6のサーバーにSOAPメッセージを送信するときに左山括弧が削除されました
これは私にとって本当に苛立たしいことなので、私が知っていることと今知らないことを説明しようと思います。投稿の下部にある私の更新を必ず確認してください。
まず、Spring-WSを使用してメッセージを処理する戦争があります。WebServiceTemplateを使用してメッセージを送信するクライアントもあります。Tomcat7にデプロイします。
現在の開発環境では、Tomcat7サーバーはJRE6u24を使用しています。ローカルでは、クライアントを使用してSOAPメッセージを送信するときに、同じバージョンを実行しています。すべてが期待どおりに機能します。
ローカルのJRE7u04を作成すると、500の応答が返され、サーバーに次のエラーが表示されます。
私は多くの潜在的な問題を経験しました。しかし、ある意味でSAAJの問題に絞り込んだと思います。
Spring-WSのSaajSoapMessageFactoryクラスには、次で始まるメソッドがあります。
JRE 6でクライアントを使用して送信すると、createMessage呼び出し後のinputStreamは次のように始まります。
これは次のように変換されます:<env:Envelope
...など。
ただし、JRE 7でクライアントを使用して送信すると、createMessage呼び出し後のinputStreamは次のように始まります。
ご覧のとおり、最初のバイトである左山かっこが欠落しています。私はそれにデバッグしようとしていますが、com.sun.xml.internalソースが不足しているため、非常に効果的です。
また、JRE 6では、checkForUtf8ByteOrderMark呼び出し後のPushbackInputStreamは、実際には最後のバイト配列のように見えます。
[60, 101, 110, 118, 58, 69, 110, 118, 101, 108, 111, 112, 101, 32, 120, 109, 108, 110, 115, 58, 101, 110, 118, 61, 34, 104, 116,
等
ただし、JRE 7を使用して送信する場合は、次のようになります。
[60, 0, 0, 0, 0, 0, 0, 0, 0
、など
現在、メソッド自体は同じフローに従っているように見えます。BOMがないことを確認してから、取得したものを元に戻して確認します(少なくとも、私にはそう見えます)。
だから、私は2つの質問があります:
1)何が起こっているのか誰か知っていますか?ここにベルを鳴らしているものはありますか?
2)これらのcom.sun.xml.internalパッケージのソースを取得するにはどうすればよいですか?
これはEclipseのTomcatでローカルに実行でき、問題はないようですが、おそらくそこではファンキーなクラス読み込みが行われていることはわかっています。
アップデート1:
私はいくつかのソースをコードに関連付けることができ、SOAPPart1_2Implでこのメソッドに入りました:
これで、InputStreamを設定する最初のパスを使用します。非常に興味深いのは、これが行われると、ソースに次のように始まるByteInputStreamがあることです。
[60, 0, 0, 101, 110, 118, 58, 69, 110, 118, 101, 108, 111, 112, 101, 32, 120, 109, 108, 110, 115, 58, 101,
等
私はこれに非常に混乱しています。これらの最初の3文字が正確にどうなるかを理解しようとします。おそらく、checkForUtf8ByteOrderMarkメソッドに何らかの副作用があります。
アップデート2:
さて、今私は本当にどこかに到達しています。そのJAXMStreamSourceクラスを調べたところ、次のメソッドを持つByteOutputStreamクラスが作成されました。
「intsz=in.read(buf、count、cap);」の行 60の後の2つのゼロが追加される場所です。私はまだ、1.7を使用しているクライアントがこの効果をもたらした可能性がある理由と理由を理解しようとしています。
java - Java アプリケーションでの SOAP 呼び出し
SOAP 呼び出しを Java アプリケーションに統合しようとしています。オンラインでさまざまなチュートリアルに従いましたが、アプリケーションを実行すると でエラーが発生しsm.saveChanges()
、その行がコメントアウトされている場合は でエラーが発生しsm.writeTo(System.out)
ます。
以下はコードです:
対応するエラーは次のとおりです。
助言がありますか?
java - Java Generic SOAPClient(SAAJ)を使用すると例外がスローされますか?
次のSOAPClientforJavaを使用しようとしています(詳細は次のチュートリアルhttp://users.skynet.be/pascalbotte/rcx-ws-doc/saajpost.htmから取得しました)。
ただし、例外をスローしているようです。
これが私のコードです:
この例ではsamples/input1.xml
、次のことが成り立つと想定しています。
私が使用しようとしているサンプルWebサービスは、次の場所にあります: http ://www.service-repository.com/client/operations
上記のJavaコードを(SOAPClientライブラリを使用して)実行すると、次の例外がスローされます。
このWebサイトを使用すると、サービスは稼働しており、正常に機能しているようです。
単純なcURLリクエストを実行することで、サービスエンドポイントがアクティブであることを確認しました。これにより、驚くほど正しい出力が生成されます。
生成される出力は次のとおりです。
だから、私の質問は次のとおりです。まず、Javaコードの何が問題になっていますか?そして、どのようにそれを修正することができますか?または、推奨される他のより優れた/より信頼性の高い汎用SOAPClientライブラリはありますか?
java - SAAJを使用したJavaSOAP呼び出しのBlowfish暗号化
標準のJava/SAAJ機能を使用して、SOAPメッセージを作成し、Webサービス(WS)呼び出しを実行しています。これまでのところ、通信はHTTPトランスポート全体で暗号化されておらず、エンドポイントでのWSの呼び出しは、次のアプローチを使用して正常に機能しています。
現在、クライアントは、Blowfishを使用してすべてのトラフィックを暗号化することを望んでいます。次の簡単なアプローチを使用して任意のデータを暗号化できることを知っています(この例ではランダムな秘密鍵を使用しています)。
ただし、欠落しているリンクは次のとおりです。Blowfishを使用してペイロードを暗号化し、応答を受信したときに復号化できるように、これら2つの部分を組み合わせるにはどうすればよいですか。
Javaが提供する標準機能(SOAPMessage
などSOAPConnection
)は、暗号化をまったくサポートしていないようです。Springがそれを助けるかもしれないインスタンスをWebServiceTemplate
サポートしているのを見てきました。ClientInterceptor
ただし、その場合、spring-wsを使用するようにWSコードを書き直す必要があります。そして、私は彼らのリファレンスドキュメントで、spring-wsを使用してこの種の暗号化を行う方法を説明する例をまだ見つけていません。
通信を暗号化する簡単な方法がありませんか?はいの場合、それは何ですか?そうでない場合、クライアントが求めていることを達成するためにどのような良いオプションがありますか?
更新:安全なトランスポートとしてHTTPSを使用することはオプションではありません。
どうもありがとうございました。
java - SOAP レスポンスの要素を取得する
SOAP request
usingを送信すると、いくつかのノードを検索する必要がSAAJ API
ある大きな を受け取ります。SOAP response
私は次のコードを使用していますが、ボディの最初のノードの名前 (HotelListResponse
多くの子を持つ) を表示するだけで、ループが 1 回だけ繰り返されることに気付きました (コメントセクションに示すように)。
要するに、型が SOAPMessage である変数で (できれば名前で) いくつかのノードを検索する方法を知る必要があります。ありがとう
weblogic-10.x - Weblogic10.3.5上のSpringWS2およびJDOM2Webサービス-リクエスト要素のテキストがバインドされていません
Spring WS 2 Webサービスを(パラメータとしてJDOM2要素を使用して)Weblogic 10.3.5サーバーにデプロイした後、ルート要素の子要素(エンドポイント関数のメインパラメータ)にTEXTコンテンツが含まれることはありません。
例:
XMLのリクエスト(送信時)
JDOM2要素構造を要求します(関数に表示されます)
これは、junitおよびglassfishサーバーで正常に機能します。weblogicの特別な構成はまだありません。
一部のweblogicライブラリがJDOM2の実装をオーバーライドする可能性があると思いますが、同様の経験があれば、いくつかの入力をいただければ幸いです。
アップデート
jdom2実装にデバッグしているときに、Textが「weblogic.xml.saaj.TextImpl」としてDOMBuilderに入っていることがわかりました。JDomはテキストを抽出できません。
たぶん誰かがweblogicライブラリがアプリケーションを台無しにするのを防ぐ方法のヒントを持っています...?
(コメントもありがとう)
web-services - 別のWebサービスを呼び出し、xml署名を使用するWebサービスのデプロイ
私の目標は、Soap(SAAJ)を使用して別のWebサービスを呼び出すWebサービスを作成することでした。ユーザーが私のWebサービスを呼び出し、署名したXMLファイル(文字列)を送信してから、ターゲットのWebサービスに送信します。ターゲットWebサービスは、署名されたXMLで応答します。その署名は、Webサービスで確認する必要があり、すべてが正常に行われた場合は、その応答をユーザーに送り返します。ターゲットWebサービスでは、HTTPS/一方向SSLハンドシェイクを使用する必要もあります。
以下は私が書いたコードであり、通常のプログラムとしてテストしたときにすべてが機能しました。その後、少し変更を加えて、EclipseとローカルTomcatサーバーを使用してWebサービスとしてテストしようとしましたが、それも機能しました。WSDLを使用してメソッドを呼び出すことができ、期待どおりの結果が得られました。ここに問題があります-スタンドアロンのWeblogic(10.3.6)サーバーにWebサービスをデプロイする必要があり、それが機能しなくなりました。JDeveloperでWebサービスを作成するためのチュートリアルに従い、それを(統合サーバーとスタンドアロンの両方の)サーバーにデプロイしましたが、メソッド呼び出しが正しく機能しません。問題はWeblogicのセキュリティと証明書の使用方法にあると思われます。SSLハンドシェイクに使用する必要のあるキーストアをWeblogicのキーストア構成に追加しましたが、役に立ちませんでした。
これは、testResponseメソッドを呼び出すときに発生するエラーです。
キーストアをWeblogicキーストア構成に追加した後、エラーメッセージが次のように変更されました。
getDataメソッドを呼び出すと、次のエラーメッセージが表示されます。
Webサービスとセキュリティに関するWeblogicのドキュメントをいくつか読みましたが、木々の木材が見えないようです。誰かが私にいくつかの指針を与えることができれば、私は非常にありがたいです。また、最後の手段として、Axis2を使用してコードを書き直し、そのようなWebサービスをWeblogicに正常にデプロイできれば役に立ちますか?