JAVA 利用axis2或cxf调用ABAP发布的Webservice
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JA V A 利用axis2或cxf调用ABAP发布的Webservice
1.调用过程中存在问题及解决办法
1.1无法利用AXIS2, CXF标准工具解析ECC发布的地址。
解决:利用IE访问Webservice地址,然后将其另存为*.xml文件
利用CXF工具,编译该*.xml 文件,生成JAVA类。
输入:wsdl2java -d src - client http://Webservice。。。。。。。
附加:wsdl2java用法:
wsdl2java -p com -d src -all aa.wsdl
-p 指定其wsdl的命名空间,也就是要生成代码的包名:
-d 指定要产生代码所在目录
-client 生成客户端测试web service的代码
将文件拷贝到程序中。
注意问题:1. 类文件中的包名需要修改,部分定义的-包.类-格式中的包也需要修改.
2. 工具生成类的过程中,如果出现重名的情况(例如某类:TEST,但是有其他类
应该是test,大小写不区分),一般只会保存一个类,需要手工添加缺少的类(可从其他代码的报错信息看出)。
1.2访问权限问题:
访问的权限体现在http的体系中
不同的调用方式,拥有不同的设置权限方法,以CXF为例:
需要在解析后的**client类中添加代码:
Client client = ClientProxy.getClient(port);
HTTPConduit http = (HTTPConduit) client.getConduit();
AuthorizationPolicy auth = new AuthorizationPolicy();
auth.setUserName("gang.xu");
auth.setPassword("654321");
h ttp.setAuthorization(auth);
1.3访问地址:
ABAP会发布两种可以访问的WSDL地址;
第一种:
:8000/sap/bc/srt/rfc/sap/ytest_se
rvice/300/ytest_service/ytest_service
第二种:
:8000/sap/bc/srt/wsdl/bndg_DF511834C4CA61F18306002
21999201E/wsdl11/allinone/ws_policy/document?sap-client=300
JAVA解析及调用的是第二种地址;第一种发布出的Webservice服务,具体的方法
等信息在第二种体现,2中,也包含了1的地址:
location=":8000/sap/bc/srt/rfc/sap/ytest_ service/300/ytest_service/ytest_service" /> 1.4调用方法 根据生成的**client类,可以找到方法名,需要传入的参数等信息。 参数类型也会根据WEBSERVICE的发布,自动解析为某个类文件。 具体的方法需要具体分析。 1.4.1MC例子 生成包mc_style 类:YTESTSERVICE.*.client.java 类中包含:ABAP发布的方法,传入的参数等。 Port.ytestservice(****); 2.侯志宇提供的方法。 ng.String _ytestService_flag = "X"; 如果flag设置为X,表示存储,如果是““,表示查询。 ng.String _ytestService_flagDelete = ""; 如果delete=X,删除表中数据。 ng.Integer _ytestService_sum = null; 如果sum = null,查询表中所有数据。 如果sum = 200,表示查询表中200条数据 com.bireturn.mc.mc_style.TableOfZservice _ytestService_yserviceVal = null; 传入的参数:具体类型和结构参照对应的类 ABAP发布Webservice 一、输入se37或者se80创建WEBSERVICE 二、Webservice创建成功后,输入事务代码SOAMANAGER 注意:WINDOWS 中需要配置host 文件 三、选择第二个也签中的第一个连接 单击Open WSDL document for selected binding连接弹出:WSDL的地址 location=":8000/sap/bc/srt/rfc/sap/zws_s ervic/300/zws_servic/zws_servic" /> LOCATION 或者ACTION后的地址则是外部调用Webservice的地址 逻辑端口也用如此方法创建