我很难使用maven来生成我的客户端.因此,请参阅我的问题的第一部分直接从源代码创建Web服务客户端.
为了简单和简短,我想从这里(src/main/java中的文件):
package com.example.maven.jaxws.helloservice;
import javax.jws.WebService;
@WebService
public class Hello {
public String sayHello(String param) {
; return "Hello " + param;
}
}
Run Code Online (Sandbox Code Playgroud)
到那里:
/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.1.7-b01-
* Generated source version: 2.1
*
*/
@WebServiceClient(name = "HelloService", targetNamespace = "http://helloservice.jaxws.maven.example.com/", wsdlLocation = "http://localhost:8080/test/")
public class HelloService
extends Service
{
private final static URL HELLOSERVICE_WSDL_LOCATION;
private final static Logger logger = Logger.getLogger(com.example.wsimport.HelloService.class.getName());
...etc
Run Code Online (Sandbox Code Playgroud)
仅使用1个pom.xml文件.
请注意最后设置的wsdlLocation.pom.xml文件可能会使用maven-jaxws-plugin wsgen和wsimport以及一些棘手的配置来实现这一点.
我们通过电子邮件与我们合作的公司提供了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)