9

YahooのWebサービスに接続しようとしています。axis2でクラスを生成しました。私が今直面している問題は、Webサービスがヘッダーに特定のキーと値のペアを必要としていることですが、そうすることは絶対にできません。私はウェブを検索し、さまざまな可能性を見つけました-それらのどれも私のために働きませんでした。最も有望なのは、このページのほぼ最後にある投稿で、生成されたスタブのコードを変更するようにクロード・コーロンブが提案しましたが、これも失敗しました。誰かがこの問題を解決する方法を教えてもらえますか?

編集

オプションを使用する提案された方法では、次の例外が発生しました。

Exception in thread "main" org.apache.axis2.AxisFault: Address information does not exist in the Endpoint Reference (EPR).The system cannot infer the transport mechanism.

これが私のコードです:

val stub = new IndexToolsApiServiceStub("https://api.web.analytics.yahoo.com/IndexTools/services/IndexToolsApiV3")

val client = stub._getServiceClient
val options = new Options
val list = new ArrayList[Header]()
val header = new Header
header.setName("YWA_API_TOKEN")
header.setValue("NOTtheREALvalue")
list.add(header)
options.setProperty(HTTPConstants.HTTP_HEADERS, list)
client.setOptions(options)
stub._setServiceClient(client)
4

6 に答える 6

6

あなたはおそらくAxis2オプションを使用したいと思うでしょう:

// Create an instance of org.apache.axis2.client.ServiceClient
ServiceClient client = ...

// Create an instance of org.apache.axis2.client.Options
Options options = new Options();

List list = new ArrayList();

// Create an instance of org.apache.commons.httpclient.Header
Header header = new Header();

// Http header. Name : user, Value : admin
header.setName("user");
header.setValue("admin");

list.add(header);
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.HTTP_HEADERS, list);

client.setOptions(options);

これがそのコードのリファレンスです。

于 2012-08-22T12:37:49.150 に答える
2

SOAPヘッダーをSOAPリクエストまたはレスポンスに追加するかどうかは関係ありません。どちらの方法でも、MessageContextを操作する必要があります。msgContextがAxis2リクエスト/レスポンスメッセージコンテキストオブジェクト(org.apache.axis2.context.MessageContext)であると仮定すると、以下のコードがトリックを実行し、それを使用してHTTPヘッダーを追加できます。

`//Instantiate an Options object from org.apache.axis2.client.Options
 Options options = new Options();
 //Instantiate an ArrayList of type NamedValue from org.apache.axis2.context.NamedValue
 List<NamedValue> namedValuePairs = new ArrayList<NamedValue>();
 //Add as much as headers you want using below code
 namedValuePairs.add(new NamedValue("sample", "value"));
 //Finally add namedValuePairs to options, and add options to msgContext
 options.setProperty(org.apache.axis2.transport.http.HTTPConstants.HTTP_HEADERS, namedValuePairs);
 msgContext.setOptions(options);`
于 2016-05-21T21:58:12.320 に答える
1

ServiceClient実際には、オプションオブジェクトを置き換えるのではなく、オプション参照を取得する必要があります。次に、必要なプロパティを追加します。

ServiceClient sc = awst._getServiceClient();
Options ops = sc.getOptions();
于 2013-02-27T16:24:21.813 に答える
0

私は2ヶ月前に問題の解決策を見つけました。Axis2でカスタマイズされたヘッダーを設定することはできません。それで、私はあなたがそれをすることができる古いAxisversionに戻りました。自分でHttpヘッダーを設定することは良い習慣ではなく、ほとんどの場合不要です。その上、それはSOAP仕様の一部ではありません。これが、Axis2では実行できない理由です。

于 2013-01-08T07:19:10.437 に答える
0

私も同じ問題を抱えていました。解決策はバルビツール酸の問題です。ヘッダーオプションを追加せずに

   // Create an instance of org.apache.axis2.client.Options
Options options = new Options();

このページは誤解を招く可能性があります:参照

于 2014-01-15T10:32:33.837 に答える
0

ソリューション -

    MyStub stub = new MyStub();
    ServiceClient serviceClient = stub._getServiceClient();
    Options options = serviceClient.getOptions();
    List<NamedValue> namedValuePairs = new ArrayList<NamedValue>();
    namedValuePairs.add(new NamedValue("Authorization", "Basic JSDFANSKMSLAWQEINCCAKNASKNAS2371BASCKA="));
options.setProperty(org.apache.axis2.transport.http.HTTPConstants.HTTP_HEADERS, namedValuePairs);

オプションに追加のプロパティを設定する必要があります。以下のように新しいオプション変数を作成しないでください。私の場合は役に立ちませんでした。

Options options = new Options();

また、HTTPConstants.AUTHENTICATE直接設定しても機能しません(以下のように設定)

clientOptions.setProperty(HTTPConstants.AUTHENTICATE, auth);
于 2021-11-24T09:25:06.013 に答える