java调用pb的webservice

songshouding 2009-02-27 03:52:03
最近因为工作需要webservice做接口传数据,上位系统是java的,折腾了很长时间,现在终于通了,向大家汇报下。
pb使用11.5
java使用eclipse,jdk1.5

最主要的参考书是网上搜到一个繁体pdf文件:《pb11webservice的应用》,按照指挥建立的服务端和客户端,是用vs2005分别作了验证,服务端、客户端都工作正常。

后面和上位java系统联调时,出了问题(上位系统的java程序,我并不了解,下面说的问题并非处处适用,仅供参考)。
1:pb客户端访问java服务端
这种例子网上最多,久不多说了。基本上使用pb的WebServiceProxy向导就能搞定,要注意的是需要在项目里添加pbwsclientxxx.pbd(在pb安装目录的share里,可以搜索下,还有个pbsoapclientxxx.pbd,好像是针对不同的服务端的,可以加不同的尝试下)。
pb的客户端访问java服务端好像没什么问题,和.net的服务端相比,我也没做什么特殊处理。

2:java客户端访问pb服务端
这个问题折腾了我很久,主要是java很不懂,pb11.5也很不懂。
java那边是直接访问我用pb做的客户端,代码如下:

public static void main( String[] args ) throws Exception{
Service service=new Service();
String endpoint="http://xxx.xxx.xxx.xxx/pb_srv/N_pb_srv.asmx";
Call call=(Call)service.createCall();
String result=null;
try {
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new javax.xml.namespace.QName("http://xxx.xxx.xxx.xxx/pb_srv","recvsrv"));
call.addParameter("recvStr", org.apache.axis.Constants.XSD_STRING, ParameterMode.IN);
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);

result = (String) call.invoke(new Object[] {"你好吗?"});
} catch (AxisFault fault) {
System.out.println( "Error : " + fault.toString());
}
System.out.println("class: "+result.toString());
}
}

访问报错:Error : System.Web.Services.Protocols.SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值: 。
但是这种方式访问.net的webservice是没问题的,网上关于这种报错的解决方案都是使用.net做服务端的,但是我不知道如何在pb里面实现。

参考《pb11webservice的应用》里面使用jsp验证pb服务端的例子(java基础太差,jsp页面报错,实在没有动力再搞tomcat了)没有实现。
后来还是使用eclipse实现,配置上tomcat,新建webserviceclient,指向到pb生成的wsdl,一路next,新建java类,直接调用导入的n_pb_srv.wsdl中string recvsrv(string)方法:

public class TestAxisWebService_pb1 {
public static void main( String[] args ) throws Exception{
String ssabc = null;
N_pb_srvLocator service = new N_pb_srvLocator();
N_pb_srvSoap tss = service.getn_pb_srvSoap();
try{
ssabc= (String)tss.recvsrv("test call pb ws");
} catch (AxisFault fault) {
System.out.println( "Error : " + fault.toString());
}
System.out.println("class: "+ssabc.toString());
}
}

测试通过。

一度想放弃pb作服务端的想法,不过终于还是实现了。希望兄弟们如果用pb作webservice,对方是java客户端的话,我的经验能有帮助。


...全文
626 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
songshouding 2009-03-02
  • 打赏
  • 举报
回复
那个pdf上举例也使用的是ref型的参数。
最初使用webservice的理由也就是通用性,本来不以为通讯是个问题,结果我们三家用三种工具,个个不一样,每一种的通讯都测了半天,完全不是那么回事。
dawugui 2009-02-27
  • 打赏
  • 举报
回复
学习,接分,帮顶.
AFIC 2009-02-27
  • 打赏
  • 举报
回复
pb作的webservice某种意义上说自成一体,
它的参数可以是ref的,这种得service用delphi的试验了半天总是调用失败。

662

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder Web 应用
社区管理员
  • Web 应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧