Axis1.4调用cxf部署的webservice,接收参数总是null值?

发布于 2021-11-11 19:45:51 字数 1692 浏览 936 评论 2

今天学习用cxf来发布webservice,下了最新的包apache-cxf-2.5.2,然后搭建了一个web项目,根据官网不引入spring时可继承CXFNonSpringServlet来发布,如下:

 

@Override
	protected void loadBus(ServletConfig config) {
		super.loadBus(config);
		Bus bus = super.getBus();
		ServerFactoryBean factory = new ServerFactoryBean();
		factory.setBus(bus);
		factory.setAddress("/hello");
		factory.setServiceClass(HelloWorld.class);
		factory.create();
	}

我的webservice程序HelloWorld.java如下:

 

public class HelloWorld {
	
	public String say(@WebParam(name="text") String text) {
		return "Hello World:" + text + "!";
	}

}

 然后启动服务,正常发布此服务。然后用axis1.4作为客户端程序调用,调用代码:

 

public class Test {
	
	public static void main(String[] args) {
		Service service = new Service();
		try {
			Call call = (Call) service.createCall();
			call.setEncodingStyle(Constants.NS_PREFIX_SCHEMA_XSD);
//			call.setUseSOAPAction(true);
//			call.setSOAPVersion(SOAPConstants.SOAP11_CONSTANTS);
			call.setTargetEndpointAddress("http://localhost:8088/cxf/ws/hello");
			call.setOperationName(new QName("http://ws.cxf.com/", "say"));
			call.addParameter("text", XMLType.XSD_STRING, ParameterMode.IN);
			call.setReturnType(XMLType.XSD_STRING);
			String result = (String) call.invoke(new Object[]{"hyq"});
			System.out.println("结果:" + result);
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

}

而服务方say方法参数总是获取null值,方法是调用到了,就是参数传输不了,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

回眸一笑 2021-11-16 14:40:01

factory.setServiceClass(HelloWorld.class);
factory.setAddress("/hello");

原来写反了,这样就可以了
   

檐上三寸雪 2021-11-16 05:28:10

终于搞定了,原来是loadBus这个实现类用下面发布方式就没问题了:

 

super.loadBus(config);
BusFactory.setDefaultBus(getBus()); 
Endpoint.publish("/hello", new HelloWorld());

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文