
SAP server SAP ECC 6.0
SAP GUI 710
本机内网IP:192.168.0.197 ,
SAP Server IP:192.168.0.1
第一步,在myeclipse中新建一个Web Service Project,取名为SayHello,默认采用的就是JAX-WS,不用改,直接点finish完成。
第二步,建立一个java class,名为HelloBody。其内容为
public class HelloBody {
public String SayHelloTo(String name)
{
return "hello: "+name;
}
}
第三步,创建web service。选择向导中Web Service下的Web Service
Next,在对话框中选择从Java Class创建wsdl。
Next,会让我们选择class。我们就选择刚才的HelloBody即可。这个对话框会让你填写java class及将要生成的Delegate class的名字。这里java Class是实际完成功能的类,而delegate class是包装java class成Web Service的类,所有请求都由其接收并解析,然后由java class完成功能,然后由Delegate将结果返回。还有要注意的是,下面让你填写WSDL的自定义信息,我们先选择Generate WSDL in Project,这样就会自动生成一个WSDL了。然后填入服务网址http://localhost:8080/,接着是Service name,这个不用修改,自动就是HelloBodyService,我们修改一下Service port,默认是HelloBodyPort,这实在不好,其实这个服务端口就是服务地址的后面部分,比如如果是默认的,那么调用的时候就是http://localhost:8080/SayHello/HelloBodyPort,网址上出现这样的写法是不是很别扭。因此,我们修改为SayHelloToMe,这里不要将Enable SOAP 1.2 Binding勾选上。如果选上的话在下面的abap调用中会出问题,因为sap还有些soap协议没有实现,有些标签不能识别,如下图
最后点击finish。我们打开Web.xml可以看到如下内容:
com.sun.xml.ws.transport.http.servlet.WSServlet
也就是说web.xml中写入了一个servlet,还有他的相对地址,看到了吧,相对地址就是/SayHelloToMe,如果刚才不改,那相对地址就变成XXPort了。。。再打开生成的HelloBodyService.wsdl,会发现描述信息都已经有了,且里面有
第四步,部署,测试是否能够访问Web Service。Java实现的Web Service实际上就是Servlet,部署在Web 容器比如tomcat上的。在部署前,我们先要为工程添加两个jar包,否则不能部署成功,因为我们用了JAX-WS框架,所以要有其jar包的支持。在我们自己配置的tomcat服务器上是默认没有这两个jar包的,所以没法跑。而如果采用myeclipse自带的tomcat,那么就不用加入这两个jar包了,因为已经默认有了。选定工程名,然后右键点击,选择属性,选择java build path,然后选择libraries,然后选择,add library。再选择MyEclipse Libraries。最后选择JAX-WS 2.1 Runtime Libraries和JAX-WS 2.1 API Libraries这两个包,点击完成。
此时,点击部署,将工程部署到tomcat上。然后运行tomcat即可。测试是在浏览器中输入http://localhost:8080/SayHello/SayHelloToMe,就能看到WebService的信息,还有WSDL的位置信息:http://localhost:8080/SayHello/SayHelloToMe?wsdl点击进去,可以看到wsdl的内容。这证明此Web Service已经部署成功,可以访问了,
如果Myeclipse没有自带的JAX包的话可以到这个地址去下:http://jax-ws.java.net/,下载完以后双击jar文件解压以后将所有jar包导入到项目中。
第二部分,SAP系统生成WEBSERVICE PROXY
用SE80进入对象浏览器,在本地对象中如下图所示路径中生成proxy
| 点击Enterprise Service以后右侧出现以下画面,选中Service Consumer,消费服务,点击Continue 出现以下画面,这里我们选中Local File,也可以选择URL/HTTP Destination用wsdl路径访问,这里我们需要修改wsdl所以选择本地文件。将wsdl文件保存到本地以后修改成如下样式 xmlns:tns="http://localhost:8080/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="HelloBodyService" targetNamespace="http://localhost:8080/"> 将部分localhost改成192.168.0.197。 Continue,将修改过后的wsdl文件上传,如果在上一步选择的URL/HTTP Destination,也需要将URL中的localhost改成服务在局域网内的地址192.168.0.1 |
| Continue,我这里选在到本地对象,prefix为ZCXH,这里必须以Z或者Y开头 |
| 然后就是两步Continue就生成proxy了,记得要保存和激活这个proxy如下图 |
| 在下一步就是生成Logical Port了,用事务码lpconfig进入port生成界面,将上图中Proxy Name考到Proxy Calss处 |
端口名随便取,我这里是LP01 ,将Defalt Port勾选上。点击创建按钮,出现如下画面 |
| 将描述写上,选中web service insfrastrue,Call Parameters标签页如下图所示: |
| URL:http://192.168.0.197:8080/SayHello/SayHelloToMe?wsdl, 192.168.0.197是我本机在局域网内的IP,SAP服务器(192.168.0.1)可以通过它访问到我本机由tomcat提供的webservice,其他的标签页默认好了,保存以后然后激活端口。 测试PROXY 回到SE80 proxy界面,如下图,点击运行(红圈所示) |
| 出现输入端口界面 |
| 输入前面我们生成的端口名,运行,出现如下界面 |
| 点击右上角的,测试,出现response界面 |
| 大功告成,下面我们用一个abap程序调用webservice,代码如下 *&---------------------------------------------------------------------* *& Report ZTCXHTEST_TEST_WS *& *&---------------------------------------------------------------------* *& *& *&---------------------------------------------------------------------* REPORT ZTCXHTEST_TEST_WS. DATA: ws_001 TYPE REF TO ZCXHCO_HELLO_BODY_DELEGATE. DATA: output TYPE ZCXHSAY_HELLO_TO_RESPONSE1, input TYPE ZCXHSAY_HELLO_TO1. input-PARAMETERS-ARG0 = 'THIS IS MY FIRST WBESERVICE PROGRAM'. CREATE OBJECT ws_001. CALL METHOD ws_001->SAY_HELLO_TO EXPORTING INPUT = input IMPORTING OUTPUT = output. WRITE: output-PARAMETERS-RETURN. 结果如下 |
Sap webservice 环境对wsdl的要求比较严格,因为sap没有完全实现soap 1.2标准,所以如果用java或者是.net生成的wsdl有问题,可能是标签不能识别等问题可查看sap notes:1403271。
