CXF在动态调用WebService的时候,本地环境在使用bindingInfo.getOperations()获取服务方法的时候能够获取所有的方法,有33个方法;但是代码发布到服务端后,bindingInfo.getOperations()该方法获取到的服务方法不全,存在个别方法无法获取的情况,只能获取到30个方法,命名空间什么的都已经排查了,没有问题,有遇见过类似问题的大佬吗?代码如下:
JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
Client mesclient = dcf.createClient("xxxx");
Object[] res = null;
String operation = "xxxxxxxxxx";
try {
Endpoint endpoint = mesclient.getEndpoint();
QName opName = new QName(endpoint.getService().getName().getNamespaceURI(), operation);
BindingInfo bindingInfo = endpoint.getEndpointInfo().getBinding();
if (bindingInfo.getOperation(opName) == null) {
for (BindingOperationInfo operationInfo : bindingInfo.getOperations()) {
if (operation.equals(operationInfo.getName().getLocalPart())) {
opName = operationInfo.getName();
break;
}
}
}
System.out.println("获取方法集合:" + bindingInfo.getOperations().toString());
System.out.println("方法对象:" + bindingInfo.getOperation(opName));
res = mesclient.invoke(opName, param);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
这看起来像是一个环境问题。具体原因可能需要更多的代码和上下文来确定。可能的原因包括:
服务端的Web服务发布的WSDL文件中包含的服务方法与本地环境不同。
代码发布到服务端后,存在权限限制导致部分方法无法访问。
代码发布到服务端后,存在环境配置问题导致部分方法无法正常调用。
建议:
检查服务端的Web服务发布的WSDL文件,确保与本地环境的WSDL文件相同。
检查代码发布到服务端后的权限限制,确保有足够的权限来访问所有的服务方法。
在服务端的环境中调试代码,确保环境配置正确。