SAP发布WebService和JAVA互联

原理:SAP通过发布WEBService,java代码去调用,从而控制sap的操作。这一方案可以将sap的业务拿到web或者Android中去。

首先SAP发布Webservice

http://jingyan.baidu.com/article/8275fc867c9e2946a13cf66c.html
这个教程很完整,第一次测试时可以完全按照步骤来操作。

这时我们可以看到sap webservice的wsdl文档。

注意,我们使用SOAMANAGER打开游览器是无法访问链接的,原因,域名解析不出来,
把生产的域名和ip地址绑定就ok,修改host文件。继续》》》

wsimport 生成java代码

由于java连接webservice代码很多,使用java自带的编译器可以很简单帮你生成该wsdl文档下的java框架。
原理很简单,wsdl包括了接口文档信息,只要把wsdl的文件给wsimport就可以生成java文件
http://blog.csdn.net/tianma630/article/details/8231224

但是。。。。我们运行后在终端报错了

[ERROR] 未找到授权文件 "/Users/developer/Desktop/auth2"。如果 WSDL 访问需要基本验证, 请在/Users/developer/.metro/auth中提供具有读取访问权限的授权文件, 或者使用 -Xauthfile 指定授权文件并在每一行上使用以下格式提供授权信息: http[s]://user:password@host:port//<url-path>

是因为我们访问sap的时候需要输入账号密码等权限。

好先帖教程
http://blog.csdn.net/dongjunwen/article/details/54890415

再贴代码

wsimport -keep -d /Users/developer/Desktop -s /Users/developer/Desktop -p com.map -verbose -Xauthfile  /Users/developer/Desktop/test.txt  http://ip:port/sap/bc/srt/wsdl/flv_10002A101AD1/bndg_url/sap/bc/srt/rfc/sap/zcs_ws001/200/zcs_ws001/zcs_ws001?sap-client=200

意思就是我要创建一个txt文件,按照http[s]://user:password@host:port//<url-path>的规则写入进去。然后通过命令行

wsimport -keep -d /Users/developer/Desktop -s /Users/developer/Desktop -p com.map -verbose -Xauthfile  /Users/developer/Desktop/test.txt  http://ip:port/sap/bc/srt/wsdl/flv_10002A101AD1/bndg_url/sap/bc/srt/rfc/sap/zcs_ws001/200/zcs_ws001/zcs_ws001?sap-client=200

我们把"-Xauthfile+文件路径"插入进去作文发送请求的标签一起发送,这个时候会把账号密码和地址一起发送请求来获得sap webservice的wsdl文件。

第二种就是使用idea自带的工具来生成代码
https://my.oschina.net/nba/blog/482117
好了,可以看到没有输入账号密码的地方,我们可以将wsdl下载下来保存为文档,然后通过idea导入生成,效果其实是一样的。

Main函数

两句代码搞定

ZCSWS001_Service mywebService = new ZCSWS001_Service();
System.out.println(mywebService.getZCSWS001().zceshi001(1,2));

好了 ,大工搞成,😔不对 又报错。

原因还是因为sap的wsdl需要用户登录才能访问。
完蛋。。。。

思索很久。嘿嘿,在网上找到办法了
http://blog.sina.com.cn/s/blog_3f2c03e30100ukg2.html
只需要在url中加入参数账户名和密码。

好了 我们定位到wsimport 生成的ZCSWS001_Service文件。
有一个静态方法,在里面修改url地址。

static {
        URL url = null;
        WebServiceException e = null;
        try {
            url = new URL("http://ip:port/sap/bc/srt/wsdl/flv_10002A101AD1/bndg_url/sap/bc/srt/rfc/sap/zcs_ws001/200/zcs_ws001/zcs_ws001?sap-client=200&sap-user=USERNAME&sap-password=PASSWORD");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        ZCSWS001_WSDL_LOCATION = url;
        ZCSWS001_EXCEPTION = e;
    }

OK,
但是。。。完蛋,,,控制台说什么 ..com不可访问。
😑,其实就是wsdl里面默认还是用的是sap产生的域名,但是域名解析不出来了,将你sap的ip地址和此生产的域名做一个host文件映射就行了。

OK,继续运行,控制台生成3,哈哈。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 29,827评论 18 399
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,562评论 24 698
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 129,292评论 18 137
  • 又是一年毕业季。细细想来,大学毕业已近十年。可是只要一拉开思绪,就好像坐着时光机回到了过去,离别时的感觉又扑面而来...
    大侠郭的小九九阅读 180评论 0 0
  • 人是一种情绪化的动物,觉得自己胖了,不开心;收到别人的负面评价,不开心;看到别人飞速成长,自己还原地踏步,焦虑,不...
    An_An阅读 343评论 3 5