网上关于此部分文档都不着调,抄来抄去的,自己都没有试过的都敢复制。因此解决此问题后现将解决办法发出来,以供大家参考
先说解决办法,详细以后补充
信息来源:
In the dynamic case, no stubs are generated automatically. Instead, a web service client uses the method to create Service instances. The following code fragment illustrates this process.
URL wsdlLocation = new URL("/");
QName serviceName = new QName("/sample", "MyService");
Service service = Service.create(wsdlLocation, serviceName);
- 1
- 2
- 3
以上来源于redhat文档的Dynamic Use Case
节点
代码操作
-
用上述代码代替
@WebServiceClient
和extends Service
。@webServiceClient注解的功能就是根据后面的value生成Service,因此为了注解中的wsdlLocation
可配置,需要我们自己手动创建Service。 -
使用
@Value
从配置文件中读取wsdlUrl,然后将原有静态块中的代码改为由@PostConstruct
修饰的初始化方法,方法内:URL url = new URL(wsdlUrl); service = Service.create(url, SERVICE);
- 1
- 2
service静态修饰,这样由Spring保证执行的顺序,读到配置文件后再生成service。
-
清除原有的构造方法。原有的构造方法需要通过super来调用父类Service的构造方法,因为我们已经在第二步中自己创建了Service,因此不需要构造方法,直接删除原有所有构造方法即可,默认会有空参构造器。
-
调用wsdl提供的业务方法时,直接使用静态的service对象代替super即可。
先附上流程,带代码脱敏后提供实例,有问题可以留言哈