jgr*_*owl 7 java jboss client wsdl web-services
我们通过电子邮件与我们合作的公司提供了wsdl和xsd架构.我们正在连接的Web服务是通过IPsec隧道访问的.在已发布的WSDL中有本地引用(在它们的末尾),这意味着我们不能使用它.
第一个问题:这是一个常见的设置吗?我认为拥有WSDL不仅要定义合同,还要将服务公开给消费者.
我可以使用wsimport,wsconsume等轻松生成提供的WSDL的客户端/服务器代码.我知道当我生成的客户端调用我生成的服务时,它会生成我需要的正确消息.
第二个问题:有没有简单的方法将其路由到不同的肥皂地址?
我只是希望能够做到这样的事情:
SalesTaxService svc = new SalesTaxService();
SalesTax tax = svc.getSalesTaxPort()
tax.getRate("NY");
Run Code Online (Sandbox Code Playgroud)
但是不要使用WSDL中定义的soap地址.我想避免为每种方法编写一堆调度客户端.
我错过了什么吗?
*回应skaffman:这是生成的.它违反了wsdlLocation的名字耸耸肩
@WebServiceClient(name = "SomeService")
public class SomeService_Service extends Service {
public SomeService_Service(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public SomeService_Service(URL wsdlLocation) {
super(wsdlLocation, new QName("urn:some_service", "SomeService"));
}
}
Run Code Online (Sandbox Code Playgroud)
我认为拥有WSDL不仅要定义合同,还要将服务公开给消费者.
不,WSDL纯粹是一种描述性工具,它没有真正的运行时角色.Web服务完全独立于WSDL运行.WSDL没有暴露的情况并不少见.
有没有一种简单的方法将其路由到不同的肥皂地址?
这完全取决于您正在使用的Web服务实现,并且您没有说,尽管我猜测JAX-WS.如果是这种情况,我认为JAX-WS工具生成的工件允许您将URL传递给客户端存根构造函数.
所以我明白了为什么我遇到了问题。我假设 wsdlLocation 必须是实际服务正在发布的 WSDL。当然事实并非如此。解决方案是将实际服务的带有正确 SOAP:Address 的本地 WSDL 打包到客户端中。
编辑 我发现您可以通过编程方式更改端点地址,而无需更改实际的 WSDL:
HelloService service = new HelloService (
this.getClass().getResource("originalHello.wsdl"),
new QName("http://example.org/hello", "HelloService "));
HelloPort proxy = service.getHelloPort();
Map<String, Object> ctxt = ((BindingProvider)proxy ).getRequestContext();
ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192);
ctxt.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://new/endpointaddress");
proxy.sayHello("Hello World!");
Run Code Online (Sandbox Code Playgroud)
图片来源:李建明
归档时间: |
|
查看次数: |
11519 次 |
最近记录: |