axis2框架用wsdl文件生成的服务端MessageReceiveInOut文件注意事项

时间:2022-10-26 15:12:16

在用axis2生成服务端文件和客户端文件,当客户端文件调用服务端文件时,都是通过wsdl文件生成的

配置文件进行相互的调用。

在一开始做开发测试的时候,通过soapUI进行调用接口的时候,可以调用成功,但这只是服务端调用,

并没有通过客户端进行调用。当服务端开发接收后,开发客户端,由客户端调用服务端文件时,一直没有调通,

后来经高人指点,原因在于生成的服务端文件--MessageReceiveInOut文件中,有一段代码需要修改,才能调通。

代码如下:

这是由wsdl文件直接生成服务端文件--MessageReceiveInOut的部分代码(生成的文件的前几行):

  public class VodServiceMessageReceiverInOut extends org.apache.axis2.receivers.AbstractInOutMessageReceiver{

        public void invokeBusinessLogic(org.apache.axis2.context.MessageContext msgContext, org.apache.axis2.context.MessageContext newMsgContext)
throws org.apache.axis2.AxisFault{ try { // get the implementation class for the Web Service
Object obj = getTheImplementationObject(msgContext); VodServiceSkeleton skel = (VodServiceSkeleton)obj;

如果同通过客户端调用服务端,需要将上述代码修改为如下:

    public class VodServiceMessageReceiverInOut extends org.apache.axis2.receivers.AbstractInOutMessageReceiver{
//VodServiceSkeleton为服务端文件的控制类,将他进行私有化,通过反射进行调用
private VodServiceSkeleton skel =
com.allcam.bpc.common.SpringContextHolder.getBean(VodServiceSkeleton.class); public void invokeBusinessLogic(org.apache.axis2.context.MessageContext msgContext, org.apache.axis2.context.MessageContext newMsgContext)
throws org.apache.axis2.AxisFault{ try { // get the implementation class for the Web Service
// Object obj = getTheImplementationObject(msgContext); // VodServiceSkeleton skel = (VodServiceSkeleton)obj;

改为以上代码就可以进行相互调用了,小知识点但却很重要。

直接对比前后代码截图:左边为直接生成代码,右边为修改后调用的代码

axis2框架用wsdl文件生成的服务端MessageReceiveInOut文件注意事项

学识尚浅,有问题欢迎指出。