@WebServiceClient注解,wsdlLocation 可配置

3,857 阅读1分钟

网上关于此部分文档都不着调,抄来抄去的,自己都没有试过的都敢复制。因此解决此问题后现将解决办法发出来,以供大家参考

先说解决办法,详细以后补充

信息来源:

In the dynamic case, no stubs are generated automatically. Instead, a web service client uses the Service.create method to create Service instances. The following code fragment illustrates this process.

URL wsdlLocation = new URL("http://example.org/my.wsdl");
QName serviceName = new QName("http://example.org/sample", "MyService");
Service service = Service.create(wsdlLocation, serviceName);

以上来源于redhat文档Dynamic Use Case节点

代码操作

  1. 用上述代码代替@WebServiceClientextends Service。@webServiceClient注解的功能就是根据后面的value生成Service,因此为了注解中的wsdlLocation可配置,需要我们自己手动创建Service。

  2. 使用@Value从配置文件中读取wsdlUrl,然后将原有静态块中的代码改为由@PostConstruct修饰的初始化方法,方法内:

URL url = new URL(wsdlUrl);
service = Service.create(url, SERVICE);

service静态修饰,这样由Spring保证执行的顺序,读到配置文件后再生成service。
3. 清除原有的构造方法。原有的构造方法需要通过super来调用父类Service的构造方法,因为我们已经在第二步中自己创建了Service,因此不需要构造方法,直接删除原有所有构造方法即可,默认会有空参构造器。 4. 调用wsdl提供的业务方法时,直接食用静态的service对象代替super即可。

先附上流程,带代码脱敏后提供实例,有问题可以留言哈