基于JAVA的JAX-WS开发webservice细节及注意事项

我们在日常生产开发中肯定会接触过系统对接,新系统的开发可能更多的是restful的对接,但是对于一些语言差异等还是需要webservice来进行开发的,那么有人就说了webservice的框架有很多啊,其实没有啥需要注意的,定义接口发布就可以了啊,对于一般的需求这无可话说,但是对于一些特殊业务的复杂XML,或者对一些发布的方法做一些过滤,我们就需要对发布的webservice进行详细的配置。比如比较特殊的Namespace,我们在调用webservice时候,会将报文拼接成我们需要的形式,比如我们用Axis2调用的报文如


	?

我们看到了上面拼接的报文,那么我们就需要有对应的webservice来接收,这里有个问题,namespace对应webservice的两个地方,一个是方法,一个是参数,如果参数未指定namespace,而我们调用的时候指定了,则方法能调用成功,但是无法接收参数。如果我们参数指定了namespace,而我们调用的时候偶为指定,方法能调用成功,但是参数无法接收,为null;所以我们需要对参数这里的明年空间格外注意。方法的前缀我们一般都会指定,如果没有我们也会给一个默认的,所以这个一般不是问题。

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService(targetNamespace = "namespace", serviceName = "TestWsService")
@SOAPBinding(parameterStyle=ParameterStyle.BARE,style=Style.DOCUMENT,use=Use.LITERAL)
public class WsDemo {
	public static void main(String[] args) {
		WsDemo hello = new WsDemo();
		Endpoint endpoint = Endpoint.create(hello);
		endpoint.publish("http://ip:8080/testWs/services/TestWs");

		System.out.println("webservice Public Success");
	}

	@WebMethod(action = "password")
	@WebResult(name = "passwordResponse")
	public String password(@WebParam(name = "passwordXml",targetNamespace="namespace_sub")String passwordXml) {
		System.out.println(passwordXml);
		return ("消息接收成功");
	}
}

 

你可能感兴趣的:(java)