我正在实现电视列表服务,并决定使用 ROVI 作为我的数据提供商。
他们为我提供了一个 API,允许我通过 SOAP 请求在我的应用程序和他们的服务器之间交换数据。
由于我使用 Java 进行编程,因此我使用 wsimport 来生成使我能够与他们的服务器交互的类。
//Connection
service = new ListingsService();
port = service.getListingsServiceSoap();
我遇到了一个 Google 似乎没有答案的问题。
根据他们的 API,每当我想调用 SOAP 服务时,我都必须将 API key 添加到 url 末尾。
问题是,我不知道该怎么做。使用 wsimport 生成的 stub ,我可以创建一个应有的请求对象;但是 URL 并未按照其规范显示。我当前获取的网址是:http://api.rovicorp.com/v9/listingsservice.asmx需要的是:http://api.rovicorp.com/v9/listingsservice.asmx?apikey=myAPIkey 。我通过打印以下代码获得了它:
System.out.println(port.toString());
尝试运行以下代码:
GetServicesRS servicesRS = port.getServices(getServicesRQ, auth)
产生以下错误:
Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 403: Forbidden
我可以使用什么 java 方法将此参数附加到 SOAP 请求 URL 中。
感谢您的帮助。
编辑。
我仍在努力解决这个问题,并且没有幸运地得到回应,如果有人能指出我的框架方向或可以促进这一点的东西那就太好了!
干杯
最佳答案
我设法使用 BindingProvider 来解决我的问题。
我将以下内容添加到我的代码中:
//Connection
service = new ListingsService();
port = service.getListingsServiceSoap();
BindingProvider bindingProvider = (BindingProvider) port;
bindingProvider.getRequestContext()
.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
"http://api.rovicorp.com/v9/listingsservice.asmx?apikey=" + APIKey);
通过上述代码,API 调用成功:
GetServicesRS servicesRS = port.getServices(getServicesRQ, auth)
希望它对将来的人有所帮助。
关于java - SOAP 设置参数java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20346616/