JAVA 利用axis2或cxf调用ABAP发布的Webservice
- 格式:doc
- 大小:240.00 KB
- 文档页数:4
现在有几种调用webservice的方法,总结一下:
①stub方式。
这种方式,是利用axis的WSDL2Java工具类。
这个是根据webservice的wsdl生成客户端类。
这样就可以像是在调用本地的类一样来调用webservice,很简单。
需要一个批处理,如下:
②动态代理
2.1. axis1.4
解释一下:编写流程:
1.创建axis的客户端服务service
2.由service创建call(call就是要进行调用的对象)
3.需要设置call对象的属性targetEndpointAddress(目标地址)和operationName(操作方法就是要调用的方法,其中这个方法需要QName(用于定位方法的)对象),new QName(path,”putInfo”)其中path是名称空间,putInfo 是这个名称空间中的一个方法(要调用的方法)。
4.最后就是调用webservice的方法了,invoke,这个方法需要传入需要的传入的参数,并且这个参数以对象数组的方式传过去。
此方法会返回返回值。
2.2 axis2
注释详细,不解释了。
Axis2与sap的webservice调用接口指南1、设置环境变量AXIS2_HOME = D:\JAVA\axis2\axis2-1.6.22、下载工具:(1.6.2生成的代理类存在BUG,建议用1.5.1版本)Eclipse:/downloads/Tomcat:/Axis:/axis2/java/core/download.cgiaxis2-war:/axis2/java/core/tools/index.htmlaxis2-eclipse-codegen-plugin:/axis2/java/core/tools/index.htmlaxis2-eclipse-service-plugin:/axis2/java/core/tools/index.html安装JDK不用多说了吧。
3、安装Eclipse插件:axis2-eclipse-codegen-plugin和axis2-eclipse-service-plugin是Eclipse的插件,分别解压在Eclipse的根目录就可以了。
注意:Axis2 1.6.2有个BUG,需要添加两个额外的Jar放在eclipse\dropins目录下:org.apache.axis2.eclipse.codegen.plugin_0.0.0.SNAPSHOT.jarorg.apache.axis2.eclipse.service.plugin_0.0.0.SNAPSHOT.jar下载地址:https:///content/groups/snapshots/org/apache/axis2/axis2.eclipse.serv ice.plugin/SNAPSHOT/https:///content/groups/snapshots/org/apache/axis2/axis2.eclipse.cod egen.plugin/SNAPSHOT/4、在SAP端发布Webservice(之前我写过相关文档,发布Web服务的细节这里就不在赘述了)5、得到WSDL文件的地址,并保存为本地文件以wsdl作为文件扩展名http://r3ids01:8000/sap/bc/srt/wsdl/bndg_534F90D9B51D4480E10080000A3F001C/wsdl1 1/allinone/ws_policy/document?sap-client=8006、在eclispe 的package Explorer 中点击右键,在菜单中选择新建--->other--->Axis2 CodeGenerator7、点击next,进入下一个页面,选择从wsdl文件来产生java文件。
Java Web Service 接口的调用方法一、配置 axis在 Java 项目中配置 Web Service 服务的第一步是使用 axis 来配置服务器。
axis 是 Web Service 服务器的驱动程序,它负责将Web Service 发布到网络上,并提供调用 Web Service 接口的服务。
在 axis 中配置服务器很简单,只需要在服务器配置文件中添加如下内容:```axis2.xml:``````<axis2><transports><transport name="http" /></transports><services><service name="MyService"><endpoint name="httpEndpoint"address="http://localhost:8080/axis2/services/MyService" /> </service></services></axis2>```上述配置中,需要将“http”改为实际的 Web Service 接口地址,例如“http://localhost:8080/axis2/services/MyService”。
此外,需要将“httpEndpoint”设置为 Web Service 接口的实际地址。
二、在项目中配置 axis在配置 axis 之后,需要在 Java 项目中使用 axis 来加载 Web Service 接口。
在 Java 项目中配置 axis 的方法有多种,其中一种方法是使用 axis 的 servlet 来加载 Web Service 接口。
1.创建 web 项目 testWebService,将 axis 那个源文件中/axis-src-14/axis-14/lib 下的几个主要的包 (就是第一步中那个配置中提到的那个几个包),拷贝到这个项目的webRoot/WEB-INF/lib 下。
要调用SAP PI的Web服务,您需要使用Java的Web服务客户端。
以下是一个简单的示例,演示如何使用Java调用SAP PI 的Web服务。
首先,您需要使用Java的`wsimport`工具从WSDL文件生成Java类。
假设您的WSDL文件名为`MyService.wsdl`,则可以使用以下命令生成Java类:```shellwsimport -keep MyService.wsdl```这将生成一个名为`MyService`的Java类,其中包含Web服务的所有端点。
接下来,您可以使用以下代码调用SAP PI的Web服务:```javaimport com.sap.aii. PI_Service_URL;import com.sap.aii.pi.ws.*;import com.sap.aii.pi.ws.soap.WS_HTTP_SOAP;public class SAP_PI_Client {public static void main(String[] args) throws Exception {WS_HTTP_SOAP wsHttpSoap = new WS_HTTP_SOAP();wsHttpSoap.setServiceURL(PI_Service_URL.getPIInstance(" your_pi_instance"));MyService myService = new MyService();MyPortType myPort = myService.getMyPort();String result = myPort.myMethod("param1", "param2"); System.out.println(result);}}```在此示例中,我们首先创建一个`WS_HTTP_SOAP`对象,并将其服务URL设置为SAP PI实例的URL。
Java WebService几种调用方式一、介绍Java WebService是一种基于SOAP协议的远程方法调用技术,可以实现跨评台、跨语言的通信。
在实际应用中,我们可以使用多种方式来调用Web服务,本文将介绍Java WebService几种常见的调用方式。
二、基于JAX-WS的调用方式JAX-WS(Java API for XML Web Services)是一种用于创建和调用Web服务的Java标准。
通过使用JAX-WS,我们可以方便地创建客户端和服务端,并进行方法调用。
在客户端,我们可以通过使用wsimport命令生成客户端的Java代码,并使用Java代码来调用Web服务的方法。
在服务端,我们可以通过使用@WebService注解来发布服务,并使用Java代码实现方法的具体逻辑。
三、基于Axis的调用方式Apache Axis是一个流行的开源Java Web服务框架,它支持SOAP协议,可以用于创建和调用Web服务。
在基于Axis的调用方式中,我们可以使用WSDL2Java工具生成客户端的Java代码,然后使用Java代码来调用Web服务的方法。
在服务端,我们可以使用Java代码实现方法的逻辑,并使用Axis框架来发布服务。
四、基于CXF的调用方式Apache CXF是另一个流行的开源Java Web服务框架,它也支持SOAP协议,并提供了丰富的特性和扩展性。
在基于CXF的调用方式中,我们可以使用wsdl2java工具生成客户端的Java代码,然后使用Java代码来调用Web服务的方法。
在服务端,我们可以使用Java代码实现方法的逻辑,并使用CXF框架来发布服务。
五、总结在本文中,我们介绍了Java WebService几种常见的调用方式,包括基于JAX-WS、Axis和CXF。
通过这些调用方式,我们可以方便地创建和调用Web服务,实现跨评台、跨语言的通信。
个人观点和理解作为Java开发人员,我认为Java WebService是一种非常重要的技术,它可以帮助我们实现分布式系统之间的通信,为企业级应用的开发提供了很大的便利。
WebService 四种发布方式总结Author:yczhang1.CXF方式CXF与spring搭建webservice是目前最流行的方式,但是传闻cxf与jdk1.5有些不兼容,我没有遇到过,我遇到的问题是cxf与was6。
1.1不兼容,表现在cxf必须的jar包“wsdl4j-1.6。
2。
jar”报错,报的错为:ng。
IncompatibleClassChangeError,明显的jar包不兼容问题,很是头痛,后来查找资料找到解决办法是,将上述jar包新建一个was共享库,可以解决,但是客户周经理不想用此种方式,因为需要修改was,于是改用了axis2方式,下文会介绍。
该问题在此处做个记录,以后使用cxf与was的时候需要注意!!!使用cxf+spring搭建WebService:第一步,添加jar包。
此处需要注意,不同环境(tomcat、was)jar也不一定相同,例如我本地cxf+spring只需要如下jar包:而泰康的was环境则需要如下jar包:明显的多了很多,原因应该是服务器jar包池的不同。
根据错误提示缺什么补什么就可以了,注意jar包勿重复.第二步,配置web.xml文件,如下(重要的地方已标记):〈context—param>〈param-name>contextConfigLocation〈/param—name〉<param-value〉classpath:/applicationContext.xml</param-value〉</context—param>〈listener〉<listener—class〉org.springframework.web。
context。
ContextLoaderListener〈/listener—class〉</listener〉〈!—- Character Encoding filter --〉<filter〉〈filter—name〉encodingFilter</filter-name〉<filter-class>org.springframework。
Java调⽤CXFWebService接⼝的两种⽅式实例1.静态调⽤// 创建WebService客户端代理⼯⼚JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();// 判断是否抛出异常factory.getOutInterceptors().add(new LoggingInInterceptor());// 注册webservice接⼝factory.setServiceClass(DeductionService.class);// 配置webservice地址factory.setAddress("http://localhost:7002/card/services/HelloWorld?wsdl");// 获得接⼝对象CxfService service = (CxfService) factory.create();// 调⽤接⼝⽅法String result = service.sayHello("aaaaaaaaaa");System.out.println("调⽤结果:" + result);// 关闭接⼝连接System.exit(0);2.动态调⽤:JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:7002/card/services/HelloWorld?wsdl");// url为调⽤webService的wsdl地址QName name = new QName("/", "sayHello");// namespace是命名空间,methodName是⽅法名String xmlStr = "aaaaaaaa";// paramvalue为参数值Object[] objects;try {objects = client.invoke(name, xmlStr);System.out.println(objects[0].toString());} catch (Exception e) {e.printStackTrace();}区别:静态调⽤需要依赖service类,因为客户端调⽤cxf webservice接⼝的过程中需要服务器端提供service,很不⽅便,如果同⼀个项⽬中则没有区别。
java调⽤WebService服务的四种⽅法总结⽬录⼀、前⾔⼆、简介三、具体解析第⼀种⽅式,⾸先得下载axis2的jar包,Axis2提供了⼀个wsdl2java.bat命令可以根据WSDL⽂件⾃动产⽣调⽤WebService的代码。
第⼆种RPC ⽅式,强烈推荐。
第三种:利⽤HttpURLConnection拼接和解析报⽂进⾏调⽤。
第四种,利⽤httpclient总结⼀、前⾔本来不想写这个的,因为⽹上类似的是在是太多了。
但是想想⾃⼰前⾯段时间⽤过,⽽且以后可能再也没机会⽤了。
所以还是记录⼀下吧。
我这⼉是以C语⾔⽣成的WebService为例。
因为通常来说,两个java端之间的互相通讯没必要写成WebService的⽅式,太⿇烦。
除⾮有⼀⽅已经固定了是webService的⽅式(常见于⽜逼的甲⽅)。
⽽且就算写成了WebService⽅式两个java端直接调⽤也相对⽐较简单,因为⽤java的话很多规范都是⾃动⽣成好的,⽽其他语⾔就不是这样了,有时候对⽅压根就不是正确的规范,你还不能让对⽅改我觉得webService这个东西常⽤于不同语⾔编写的服务器之间进⾏数据交互。
因为是基于WSDL的。
我知道的主要的⽅法有以下⼏种(我这⼉全部以C语⾔编写的WebService做优缺点⽐较):⼆、简介1、通过axis2将WebService提供的wsdl⽂件⽣成对应的java类,这样就可以相当调⽤本地类⼀样调⽤webService提供的接⼝。
优点:调⽤简单,⽆需⾃⼰编写太多的东西。
缺点:⼤部分情况根据对应的webService⽣成的服务中地址是固定的,不易更改,⽽且⽣成的代码过于庞⼤,不便于阅读。
同时必须得有webservice对应的的wsdl⽂件,不太可控。
2、通过RPC⽅式调⽤(推荐使⽤)优点:⾃⼰编写部分调⽤代码,可灵活更换调⽤的路径,适合分布式部署的服务器,只需要知道webservice服务的⽅法名、命名空间、以及对应的参数就好。
java 调用webservice的各种方法总结现在webservice加xml技术已经逐渐成熟,但要真正要用起来还需时日!!由于毕业设计缘故,我看了很多关于webservice方面的知识,今天和大家一起来研究研究webservice的各种使用方法。
一、利用jdk web服务api实现,这里使用基于SOAP message 的Web 服务1.首先建立一个Web services EndPoint:package Hello;import javax.jws.WebService;import javax.jws.WebMethod;import javax.xml.ws.Endpoint;@WebServicepublic class Hello {@WebMethodpublic String hello(String name) {return "Hello, " + name + "\n";}public static void main(String[] args) {// create and publish an endpointHello hello = new Hello();Endpoint endpoint = Endpoint.publish("http://localhost:8080/hello", hello);}}2.使用apt 编译Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成jaws目录3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示4.使用wsimport 生成客户端使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl这时,会在当前目录中生成如下文件:5.客户端程序:1class HelloClient{2public static void main(String args[]) {3 HelloService service = new HelloService();4 Hello helloProxy = service.getHelloPort();5 String hello = helloProxy.hello("你好");6 System.out.println(hello);7 }8}9以上方法还稍显繁琐,还有更加简单的方法二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的利用xfire开发WebService,可以有三种方法:1一种是从javabean 中生成;2 一种是从wsdl文件中生成;3 还有一种是自己建立webservice步骤如下:用myeclipse建立webservice工程,目录结构如下:首先建立webservice接口,代码如下:1package com.myeclipse.wsExample;2//Generated by MyEclipse34public interface IHelloWorldService {56 public String example(String message);78} 接着实现这个借口:1package com.myeclipse.wsExample; 2//Generated by MyEclipse34public class HelloWorldServiceImpl implements IHelloWorldService { 56 public String example(String message) {7 return message;8 }910} 修改service.xml 文件,加入以下代码:1<service>2 <name>HelloWorldService</name>3 <serviceClass>4 com.myeclipse.wsExample.IHelloWorldService5 </serviceClass>6 <implementationClass>7 com.myeclipse.wsExample.HelloWorldServiceImpl8 </implementationClass>9 <style>wrapped</style>10 <use>literal</use>11 <scope>application</scope>12 </service> 把整个项目部署到tomcat服务器中,打开浏览器,输入http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl,可以看到如下:然后再展开HelloWorldService后面的wsdl可以看到:客户端实现如下:1package com.myeclipse.wsExample.client;23import .MalformedURLException;4import .URL;56import org.codehaus.xfire.XFireFactory;7import org.codehaus.xfire.client.Client;8import org.codehaus.xfire.client.XFireProxyFactory;9import org.codehaus.xfire.service.Service;10import org.codehaus.xfire.service.binding.ObjectServiceFactory;1112import com.myeclipse.wsExample.IHelloWorldService;1314public class HelloWorldClient {15public static void main(String[] args) throws MalformedURLException, Exception {16// TODO Auto-generated method stub17Service s=new ObjectServiceFactory().create(IHelloWorldService.class);18XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire());19String url="http://localhost:8989/HelloWorld/services/HelloWorldService";2021 try22 {2324 IHelloWorldService hs=(IHelloWorldService) xf.create(s,url);25 String st=hs.example("zhangjin");26 System.out.print(st);27 }28 catch(Exception e)29 {30 e.printStackTrace();31 }32 }3334}35 这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:1public static void main(String[] args) throws MalformedURLException, Exception {2 // TODO Auto-generated method stub3 Service s=new ObjectServiceFactory().create(IHelloWorldService.class);4 XFireProxyFactory xf=new XFireProxyFactory(XFireFactory.newInstance().getXFire()); 567//远程调用.net开发的webservice8Client c=new Client(new URL("/webservices/qqOnlineWebService.asmx?wsdl"));9 Object[] o=c.invoke("qqCheckOnline", new String[]{"531086641","591284436"});1011//调用.net本机开发的webservice12Client c1=new Client(new URL("http://localhost/zj/Service.asmx?wsdl"));13Object[] o1=c1.invoke("HelloWorld",new String[]{});1415}三、使用axis1.4调用webservice方法前提条件:下载axis1.4包和tomcat服务器,并将axis文件夹复制到tomcat服务器的webapp文件夹中这里我就说一下最简单的方法:首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入http://localhost:8989/axis/HelloWorld.jws?wsdl,就会得到一个wsdl文件,其客户端调用方法如下:1import javax.xml.rpc.Service;2import javax.xml.rpc.ServiceException;3import javax.xml.rpc.ServiceFactory;45import .MalformedURLException;6import .URL;7import java.rmi.RemoteException;89import space.QName;1011public class TestHelloWorld {121314 public static void main(String[] args) throws MalformedURLException, ServiceException, RemoteException {15 // TODO Auto-generated method stub1617 String wsdlUrl ="http://localhost:8989/axis/HelloWorld.jws?wsdl";18 String nameSpaceUri ="http://localhost:8989/axis/HelloWorld.jws";19 String serviceName = "HelloWorldService";20 String portName = "HelloWorld";2122 ServiceFactory serviceFactory = ServiceFactory.newInstance();23 Service afService =serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri, serviceName));24 HelloWorldInterface proxy = (HelloWorldInterface)afService.getPort(new QName(nameSpaceUri, portName),HelloWorldInterface.class);25 System.out.println("return value is "+proxy.getName("john") ) ;2627 }2829}30四、使用axis2开发webservice(这里首先感谢李宁老师)使用axis2 需要先下载axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip/axis2/同理,也需要将axis2复制到webapp目录中在axis2中部署webservice有两种方法,第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明下面分别说明使用方法:1.pojo方式:在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。
CXF使⽤教程(⼆)——webService⾃动⽣成客户端代码webService⾃动⽣成客户端代码有四种⽅法:⼀:使⽤Axis⽣产客户端代码(另存为bat⽂件)需要注意的是:⽬录包含空格,⽐如Axis_Lib,Output_Pathset Axis_Lib=F:\axis1.4\axis\WEB-INF\libset Java_Cmd=java -Djava.ext.dirs=%Axis_Lib%set Output_Path=D:\Workspacesset Package=com.axis.sub%Java_Cmd% org.apache.axis.wsdl.WSDL2Java -o%Output_Path% -p%Package% http://192.168.11.62:8090/rainLogin?wsdl pause⼆:使⽤JDK1.6的wsimport.exe(在jdk的bin⽬录下)产⽣客户端代码(之前要将JDK的bin添加到环境变量Path中)wsimport -keep -p com.jdk6.sub -s JavaSrc http://192.168.11.62:8090/rainLogin?wsdl1. -s(src):在当前路径下的JavaSrc(要⼿动创建)⽂件夹中⽣成客户端代码2. -p(package):定义客户端代码的包名3. -keep 保留.class⽂件三:使⽤CXF wsdl2java.bat (要先将CXF的bin⽬录添加到环境变量Path下)在cmd本项⽬SCR⽬录下运⾏下⾯代码,就会在src下⽣成客户端代码wsdl2java http://192.168.11.62:8080/FFWebservice/services/PortalServices?wsdl四:使⽤Myeclipse⾃带⼯具⽣成客户端代码finnish 就可以⽣成客户端代码了。
个⼈⼀般⽐较喜欢⽤第⼆种⽅法。
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的地址:
<wsdl:service name="service">
<wsdl:port name="YTEST_SERVICE" binding="tns:YTEST_SERVICE">
<soap:address
location=":8000/sap/bc/srt/rfc/sap/ytest_ service/300/ytest_service/ytest_service" />
</wsdl:port>
</wsdl: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的地址
<soap:address
location=":8000/sap/bc/srt/rfc/sap/zws_s ervic/300/zws_servic/zws_servic" />
LOCATION 或者ACTION后的地址则是外部调用Webservice的地址
逻辑端口也用如此方法创建。