现在有个项目是用CXF提供WebService服务
由于是初学者,花了1天多时间实现了功能,下面是我的服务端的代码
接口:
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface TbSysUserinfoFor4AWebService {
@WebMethod
public String UpdateAppAcctSoap(@WebParam(name = "requestInfo") String requestInfo);
}
实现:
@Service("userinfoManageFor4A")
@WebService(endpointInterface="service.tbSysUserinfoFor4AService.TbSysUserinfoFor4AWebService")
public class TbSysUserinfoFor4AWebServiceImpl implements
TbSysUserinfoFor4AWebService {
@SuppressWarnings("finally")
@Override
public String UpdateAppAcctSoap(String requestInfo) {
// 具体实现略
return xml;
}
}
xml配置:
<jaxws:server address="/userinfoManageFor4A" >
<jaxws:serviceBean>
<ref bean="userinfoManageFor4A"/>
</jaxws:serviceBean>
</jaxws:server>
我测试的用的是axis,代码如下。
public class TestWebService {
@Test
public void testUserInfoWebService(){
String xml = "<?xml version='1.0' encoding='UTF-8'?>略</USERMODIFYREQ>";
String url = "http://localhost:8080/cloud/WebService/userinfoManageFor4A?wsdl";
String method = "UpdateAppAcctSoap";
String parameterName = "requestInfo";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
QName qName = new QName("http://tbSysUserinfoFor4AService.service/", method);
// QName qName = new QName(method, method);
call.setOperationName(qName);
call.setUseSOAPAction(true);
call.addParameter(parameterName, XMLType.XSD_STRING, ParameterMode.IN);
call.setReturnType(XMLType.XSD_STRING);
String msg = call.invoke(new Object[]{xml}).toString();
System.out.println(msg);
}
}
服务起起来后,用QName qName = new QName("http://tbSysUserinfoFor4AService.service/", method);的方式可以实现访问并返回正常的结果
在跟其他系统做联调测试的时候,发现对方的访问方式跟我的测试访问方式不大相同
联调测试的时候发现对方的访问方式是QName qName = new QName(method, method);也就是说对方的Qname的namespaceuri参数是和后面一个参数是相同的内容,用这种方式来访问我的服务始终访问不了
对方系统也提供了WebService服务,我写了一段和对方类似的客户端代码去访问对方的服务,用QName qName = new QName(method, method);的方式去访问,也能正常访问和返回结果
看来这种方式是可行的,区别应该是我的服务端配置可能没有达到对方的要求
那CXF的服务端要怎样配置才能够让Qname的两个参数一样的内容呢?
请大家帮我看看这里怎么实现,谢谢!