我尝试连接到Yahoo webservice。我按轴2生成了类。我现在面临的问题是,web服务需要标题中的特定键值对,我绝对不能这样做。我在网上搜索并找到了不同的可能性 - 它们都不适合我。最有希望的是几乎在this page结束时的帖子,Claude Coulombe是否会改变生成存根的代码,但这也失败了。任何人都可以告诉我如何解决这个问题吗?
修改
使用Options的建议方式产生了以下异常:
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)
答案 0 :(得分:4)
您可能想要使用Axis2
的{{3}}:
// 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);
以下是该代码的Options。
答案 1 :(得分:1)
如果要将HTTP标头添加到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);`
答案 2 :(得分:0)
两个月前我找到了解决问题的方法。您无法使用Axis2设置自定义标头。所以我回到了旧的Axisversion,你可以做到这一点。自己设置Http-header并不是一个好习惯,而且大多是不必要的。最重要的是,它不是SOAP规范的一部分。这就是为什么你不能用Axis2做的原因。
答案 3 :(得分:0)
实际上,您只需从ServiceClient
检索选项引用,而不是替换选项对象。然后添加所需的属性:
ServiceClient sc = awst._getServiceClient();
Options ops = sc.getOptions();
答案 4 :(得分:0)
我也有同样的问题,解决方案是Barbiturica: 不带
添加标题选项 // Create an instance of org.apache.axis2.client.Options
Options options = new Options();
此页面具有误导性:reference