JAVA 利用axis2或cxf调用ABAP发布的Webservice
调用Webservice几种方法的总结
现在有几种调用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调用接口指南
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接口的调用方法
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 下。
java调用sap pi webservice实例
要调用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几种调用方式一、介绍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五种发布方式及客户端调用
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接口的两种方式实例
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服务的四种方法总结
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接口
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自动生成客户端代码
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 就可以⽣成客户端代码了。
个⼈⼀般⽐较喜欢⽤第⼆种⽅法。
ABAP发布WEBSERVICE以及JAVA调用
ABAP发布Webservice以及JAVA调用方式ABAP发布Webservice一、输入se37或者se80创建WEBSERVICE二、Webservice创建成功后,输入事务代码SOAMANAGER注意:WINDOWS 中需要配置host 文件三、选择第二个也签中的第一个连接单击Open WSDL document for selected binding连接弹出:WSDL的地址<soap:addresslocation=":8000/sap/bc/srt/rfc/sap/zws_s ervic/300/zws_servic/zws_servic" />LOCATION 或者ACTION后的地址则是外部调用Webservice的地址逻辑端口也用如此方法创建JA V A调用ABAP发布的Webservice1.调用过程中存在问题及解决办法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_service/300/ytest_service/ytest_service第二种::8000/sap/bc/srt/wsdl/bndg_DF511834C4CA61F1830600221999201E/wsdl11/allinone/ws_policy/document?sap-client=300JAVA解析及调用的是第二种地址;第一种发布出的Webservice服务,具体的方法等信息在第二种体现,2中,也包含了1的地址:<wsdl:service name="service"><wsdl:port name="YTEST_SERVICE" binding="tns:YTEST_SERVICE"><soap:addresslocation=":8000/sap/bc/srt/rfc/sap/ytest_ service/300/ytest_service/ytest_service" /></wsdl:port></wsdl:service>1.4调用方法根据生成的**client类,可以找到方法名,需要传入的参数等信息。
Java通过cxf发布和调用webservices接口
Java通过cxf发布webservices接口第一步:创建一个工程如:cxfserver1注:web工程和java工程都可以第二步:把apache-cxf-2.6.1资源包中lib文件夹下所有的jar包共计75个,都拷贝到cxfserver1的lib目录下,如果你的工程师java工程自己创建一个lib文件夹第三步:创建一个包inter,在inter下创建一个发布接口,接口名HelloWorld ,并进行webservices注解package inter;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;/*** 发布接口* @author Administrator**/@WebServicepublic interface HelloWorld {@WebMethodpublic String sayHello(@WebParam(name="name")String name);}第四步:创建一个包impl,在impl下创建一个接口实现类,对接口中的方法进行功能实现package impl;import inter.HelloWorld;/*** 接口功能实现类* @author Administrator**/public class HelloWorldImpl implements HelloWorld {public String sayHello(String name) {// TODO Auto-generated method stubSystem.out.println("进入接口中");return name.concat(",进入接口中");}}第五步:创建一个包release,在release下创建一个接口发布主线程入口,执行该方法进行接口发布package release;import impl.HelloWorldImpl;import inter.HelloWorld;import org.apache.cxf.interceptor.LoggingInInterceptor;import org.apache.cxf.interceptor.LoggingOutInterceptor;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;/*** 发布接口的主线程入口类**/public class ReleasePortMain {public static void main(String[] args) {// TODO Auto-generated method stubHelloWorldImpl implementor = new HelloWorldImpl();//初始化功能实现类JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();//初始或工厂类svrFactory.setServiceClass(HelloWorld.class);//设置发布接口对象svrFactory.setAddress("http://localhost:9000/helloWorld");//自己设置发布接口在JVM 中的访问地址svrFactory.setServiceBean(implementor);//设置接口功能实现类对象svrFactory.getInInterceptors().add(new LoggingInInterceptor());//设置异常抛出svrFactory.getOutInterceptors().add(new LoggingOutInterceptor());//设置异常抛出svrFactory.create();//执行接口发布}}注:如果执行发布接口,抛出如下异常信息: Creating Service {http://inter/}HelloWorldService from class inter.HelloWorldException in thread "main" ng.LinkageError: 正在从引导类加载器加载JAXB 2.1 API, 但此 RI (来自jar:file:/D:/worke/codehy/cxfserver1/lib/jaxb-impl-2.2.5.jar!/com/sun /xml/bind/v2/model/impl/ModelBuilder.class) 需要 2.2 API。
visual studio code java调用webservice方法(一)
Visual Studio Code 是一个轻量级但功能强大的集成开发环境,它支持多种编程语言,包括 Java。
在使用 Visual Studio Code 进行 Java 开发时,经常需要调用 WebService 方法来实现与其他系统的数据交互。
本文将详细介绍在Visual Studio Code 中如何调用 WebService 方法的各种方法。
使用 Axis2 插件Axis2 是一个流行的 WebService 框架,它提供了丰富的工具来生成WebService 客户端代码。
在 Visual Studio Code 中,可以通过安装 Axis2 插件来使用其功能。
首先,在 Visual Studio Code 中搜索并安装 Axis2 插件,然后按照插件的指引配置 WebService 的 WSDL 地址和生成客户端代码。
最后,根据生成的客户端代码,调用 WebService 方法并处理返回结果。
使用 Apache CXF 插件Apache CXF 是另一个优秀的 WebService 框架,它也提供了丰富的工具来生成 WebService 客户端代码。
在 Visual Studio Code 中,可以通过安装Apache CXF 插件来使用其功能。
首先,在 Visual Studio Code 中搜索并安装Apache CXF 插件,然后按照插件的指引配置 WebService 的 WSDL 地址和生成客户端代码。
最后,根据生成的客户端代码,调用 WebService 方法并处理返回结果。
使用 JAX-WS 注解JAX-WS 是 Java API for XML Web Services 的缩写,它提供了一种基于注解的方式来定义和调用 WebService。
在 Visual Studio Code 中,可以直接使用JAX-WS 注解来定义 WebService 客户端。
首先,通过在 Java 类中使用@WebServiceClient 注解来定义 WebService 客户端,然后使用 @WebMethod 注解来定义调用的 WebService 方法。
使用axis2访问webservice.
return translatorString;
}
练习
阅读WeatherWS-2.xml,调用服务的getWeatherbyCityName操作 阅读WeatherWS-1.xml ,调用服务的getWeather操作 阅读ValidateCodeWebService.xml,调用cnValidateByte操作
</TranslatorStringResult> </TranslatorStringResponse> </Body >
public class Translation { public static void main(String[] args) { try { ServiceClient client = new ServiceClient(); // 创建ServiceClient对象 // 创建Option对象,该对象包含服务的属性,如地址,soapAction,传输协议等 Options opts = new Options(); // 设置目标服务地址 opts.setTo(new EndpointReference( " /webservices/EnglishChinese.asmx")); // 设置操作的soapAction值 opts.setAction("/TranslatorString"); // 指定soap版本,默认是1.1,这里指定为1.2 opts.setSoapVersionURI(Constants.URI_SOAP12_ENV); client.setOptions(opts); // 为ServiceClient设置option // 发送请求并得到返回结果,请求和响应均是一个OMElement对象 OMElement res = client.sendReceive(createPayLoad()); //输出返回结果,如有进一步需求,只要对返回结果的xml做解析即可 System.out.println(res); } catch (AxisFault e) { e.printStackTrace(); } }
详解java开发webservice的几种方式
详解java开发webservice的⼏种⽅式webservice的应⽤已经越来越⼴泛了,下⾯介绍⼏种在Java体系中开发webservice的⽅式,相当于做个记录。
1.Axis2Axis是apache下⼀个开源的webservice开发组件,出现的算是⽐较早了,也⽐较成熟。
这⾥主要介绍Axis+eclipse开发webservice,当然不⽤eclipse也可以开发和发布webservice,只是⽤eclipse会⽐较⽅便。
(3)下载eclipse的axis2插件(4)eclipse安装axis2插件1)在任意⽬录下新建⼀个Axis2⽂件夹,在该⽂件夹下新建eclipse⽬录,在eclipse⽬录中新建plugins⽬录和features⽬录,例如:D:\programSoftware\eclipse-SVN\Axis2\eclipse;2)把下载的axis2插件解压,并把解压的⽂件放到新建的eclipse的plugins⽬录下;3)在%eclipse_home%的⽬录下新建links⽬录,并在links⽬录下新建axis2.link⽂件,内容为:path=D:\programSoftware\eclipse-SVN\Axis2;4)重启eclipse,点击·file-new-other,如果看到Axis2 Wizards,则表明插件安装成功。
(5)安装axis2(6)使⽤eclipse新建web⼯程,创建⼀个普通java类,⾄少包含⼀个⽅法。
(7)发布webservice1)点击eclipse的File-New-other,打开Axis2 Wizards,选择Axis2 Service Archiver,然后Next;2)选择Class File Location,也就是类⽂件存放路径,注意:只选到classes⽬录,不要包括包⽂件夹,然后Next;3)选择Skip WSDL,然后Next4)⼀路Next到Select the Service XML file to be included in the Service archive,勾选Generate theservice xml automatically;5)Service Name-填写你的service名称,Class Name-填写类名称,要包括包名,然后点击load,然后点击Finish,这时webservice就发布成功了;6)然后到%TOMCAT_HOME%/webapps/axis2/WEB-INF/services 看看是否多了⼀个.aar的⽂件;2.Apche CXFCXF开发webservice也是⽐较⽅便和简单的,它和spring的集成可以说是⾮常地好。
JavaCXF框架调用WebService接口
JavaCXF框架调⽤WebService接⼝WebService接⼝调⽤(CXF框架)maven中添加cxf依赖:<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.4.4</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.4.4</version></dependency>版本请与依赖保持⼀直。
IDEA设置:File -> Setting -> Tools -> Web Service设置CXF为⽣成⼯具根路径,如:C:\DevKit\apache-cxf-3.4.4IDEA Project窗⼝选中要⽣成的包,⼯具栏点击Tools -> WebService -> Generate Java Code From Wsdl 填⼊WSDL地址、输出路径,Service Platform选择CXF,确定⽣成。
PS:IDEA 2019版本存在bug,没有Generate Java Code From Wsdl菜单,详见或更换IDEA版本。
追加Header认证⾸先添加⾃定义Header处理类:static class ClientAuthInterceptor extends AbstractPhaseInterceptor<SoapMessage> {/*** 认证头格式:* <tns:RequestSOAPHeader xmlns:tns="http://sys.webservice.client">* <tns:user>user</tns:user>* <tns:password>password</tns:password>* </tns:RequestSOAPHeader>*/private static final String USER = "user";private static final String PASSWORD = "password";public ClientAuthInterceptor() {super(Phase.PREPARE_SEND);}@Overridepublic void handleMessage(SoapMessage message) throws Fault {List<Header> headers = message.getHeaders();Document doc = DOMUtils.createDocument();Element header = doc.createElement("tns:RequestSOAPHeader");header.setAttribute("xmlns:tns", "http://sys.webservice.client");Element user = doc.createElement("tns:user");user.setTextContent(USER);Element password = doc.createElement("tns:password");password.setTextContent(PASSWORD);header.appendChild(user);header.appendChild(password);headers.add(new Header(new QName(""), header));}}导包详情添加⾃定义Header处理器:// 这两⾏是⼯具⽣成出来的接⼝ISysNotifyTodoWebServiceService ss = new ISysNotifyTodoWebServiceService(wsdlURL, SERVICE_NAME);ISysNotifyTodoWebService port = ss.getISysNotifyTodoWebServicePort(); // 创建接⼝时添加⾃定义Header处理器Client client = ClientProxy.getClient(port);client.getOutInterceptors().add(new ClientAuthInterceptor());。
Axis2 Java调用WebService
Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物。
Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebService,同时还支持Spring、JSON等技术。
这些都将在后面的系列教程中讲解。
在本文中主要介绍了如何使用Axis2开发一个不需要任何配置文件的WebService,并在客户端使用Java和C#调用这个WebService。
一、Axis2的下载和安装读者可以从如下的网址下载Axis2的最新版本:/axis2/在本文使用了目前Axis2的最新版本1.4.1。
读者可以下载如下两个zip包:axis2-1.4.1-bin.zipaxis2-1.4.1-war.zip其中axis2-1.4.1-bin.zip文件中包含了Axis2中所有的jar文件, axis2-1.4.1-war.zip 文件用于将WebService发布到Web容器中。
将axis2-1.4.1-war.zip文件解压到相应的目录,将目录中的axis2.war文件放到<Tomcat安装目录>\webapps目录中(本文使用的Tomcat的版本是6.x),并启动Tomcat。
在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/如果在浏览器中显示出如图1所示的页面,则表示Axis2安装成功。
图1二、编写和发布WebService对于用Java实现的服务程序给人的印象就是需要进行大量的配置,不过这一点在Axis2中将被终结。
在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。
其中POJO中所有的public方法将被发布成WebService方法。
下面我们来实现一个简单的POJO,代码如下:public class SimpleService{public String getGreeting(String name){return "你好 " + name;}public int getPrice(){return new java.util.Random().nextInt(1000);}}在SimpleService类中有两个方法,由于这两个方法都是public方法,因此,它们都将作为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的地址:
<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的地址
逻辑端口也用如此方法创建。