当前位置 : 主页 > 网页制作 > Nodejs >

我的第一个webservice接口遇到的问题

来源:互联网 收集:自由互联 发布时间:2021-06-24
我对webservice一直觉得很陌生很难理解,工作中遇到了需要使用webservice的情况只好硬着头皮去做。 我做了一个webservice接口: ePolicyCallBackWSDD.java: public class ePolicyCallBackWSDD { public static L

我对webservice一直觉得很陌生很难理解,工作中遇到了需要使用webservice的情况只好硬着头皮去做。

我做了一个webservice接口:

ePolicyCallBackWSDD.java:

public class ePolicyCallBackWSDD {
    public static Logger logger = Logger.getLogger(ePolicyCallBackWSDD.class);
public synchronized int  saveCallBackPolicy(CallBackPolicyInfo cbpi){
CallBackWSDDService wsd=new CallBackWSDDService();

int rt=wsd.saveCallBackPolicy(cbpi);
System.out.println(rt);
logger.info("saveCallBackPolicy:return="+rt);
return rt;
}

CallBackWSDDService.java:

public int saveCallBackPolicy(CallBackPolicyInfo cbpi) {
SessionHibernate bhd  = new SessionHibernate();
BaseHibernateDAO bd=new BaseHibernateDAO();

              ........................

       //保存CallBackPolicyInfo参数,返回结果

}

在server-config.wsdd 文件中做了如下配置:

  <service name="ePolicyCallBackWSDD" provider="java:RPC">
  <parameter name="allowedMethods" value="*"/>
  <parameter name="scope" value="request"/>
  <parameter name="className" value="com.generaliChina.callCenter.callBack.webService.ePolicyCallBackWSDD"/>
 </service>


以为万事大吉,把接口地址给客户端同事让他测试,结果报错:

org.xml.sax.SAXException: Deserializing parameter 'cbpi': could not find deserializer for type {http://business.hibernate.callBack.callCenter.generaliChina.com}CallBackPolicyInfo


客户端同事问我能不能把参数改一下,不要使用对象,用数组或者列表,我不死心,觉得总会找到报错原因的,就去查资料,找到了如下答案:

错误提示已经很明确了说你的方法中的book变量没有指定消息解析器,对于自定义类型(即自定义类)必须指定解析器否则AXIS不知道如何把SOAPMessage和方法参数之间进行转换,在wsdd部署文件中的该服务的<service></service>中增加子元素:
<beanMapping qname="myNS:Book" xmlns:myNS="urn:BookService" languageSpecificType="java:Book类的完全类名称"/>
我试着改了一下,在server-config.wsdd文件中作了修改:
  <service name="ePolicyCallBackWSDD" provider="java:RPC">
  <parameter name="allowedMethods" value="*"/>
  <parameter name="scope" value="request"/>
  <parameter name="className" value="com.generaliChina.callCenter.callBack.webService.ePolicyCallBackWSDD"/>
 <beanMapping qname="myNS:CallBackPolicyInfo" xmlns:myNS="urn:ePolicyCallBackWSDD" languageSpecificType="java:com.generaliChina.callCenter.callBack.hibernate.business.CallBackPolicyInfo"/>
 </service>

再次测试,ok!很激动,感谢万能的网友。

原文地址如下:

https://zhidao.baidu.com/question/121567050.html

网友评论