cxf+spring发布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.web.filter.CharacterEncodingFil ter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>encodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>CXFServlet</servlet-name><servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-c lass><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/webservice/*</url-pattern></servlet-mapping>上述标记的地方,第一处是spring配置文件路径;第二出是wsdl地址内容;第三步,编写接口类与实现类,注意注解接口类@WebServicepublic interface SendService {public boolean sendOA(@WebParam(name="param")String param);public boolean sendOrg(OrgEntity org);}实现类@WebService(endpointInterface="com.service.SendService",serviceName=" sendService")public class SendServiceImpl implements SendService{public boolean sendOA(String param) {System.out.println("-------sendOA---------param:"+param);if(param.equals("zhoujian")){return true;}return false;}public boolean sendOrg(OrgEntity org) {System.out.println("-------sendOrg--begin-------");return true;}}第四步,Spring配置文件“jaxws:client”该标签可以不必写,访问时可以手动拼接该url 第五步,发布,直接部署到服务器,访问:2.Xfire方式据说xfire方式已经很老了,但个人感觉,xfire方式很简单且容易配置,不知为啥过时了,也没感觉cxf、axis2哪里先进,我当时卡在cxf与was搞不定时想尝试xfire方式被周经理给拒绝了。
java webservice几种调用方式

java webservice几种调用方式Java Web Service是一种流行的技术,用于通过网络在不同系统之间实现通讯和集成。
在Java中,有多种方式可以调用Web Service。
下面将介绍几种常用的调用方式。
1.使用SOAP(Simple Object Access Protocol)协议SOAP是一种基于XML的通讯协议,可以在网络上使用HTTP、SMTP等协议发送和接收消息。
在Java中,可以使用SOAP协议调用Web Service。
SOAP使用WSDL(Web Services Description Language)来描述Web Service的接口和功能。
可以使用轻量级的SOAP框架Apache CXF或Metro来创建和调用SOAP Web Service。
调用方式主要包括以下几步:-创建一个Java类来表示Web Service的接口,并使用注解来定义接口的操作。
-使用工具,如Apache CXF或Metro,将该类生成WSDL文档。
-使用WSDL文档生成客户端代码,以便在调用Web Service时使用。
-创建一个客户端程序,通过调用生成的客户端代码来调用Web Service的方法。
2.使用JAX-WS(Java API for XML Web Services)标准JAX-WS是一种Java的Web Service规范,它提供了一种简单的方式来创建和调用Web Service。
JAX-WS提供了注解,用于将Java类转换为Web Service,并且可以使用Java的代理类来调用Web Service 的方法。
调用方式包括以下几步:-创建一个Java类,并用@WebService注解来标记它作为一个Web Service的实现。
-在该类中定义Web Service的操作,并使用@WebMethod注解来标记这些方法。
-使用工具,如JDK的wsimport命令或Eclipse的WebService工具来生成客户端代码。
webservice接口调用方法

webservice接口调用方法Web服务(Web service)是指一个网络服务,通过互联网进行通信的应用程序接口(API),使用标准的HTTP协议进行数据传输和交互。
它使用SOAP(Simple Object Access Protocol)来封装数据,以XML格式进行传递,可以在多种平台上进行调用,独立于编程语言和操作系统。
调用Web服务的方法如下:1.确定服务地址和方法:首先要确定要调用的Web服务的地址和要调用的方法。
通常,服务地址是一个URL(Uniform Resource Locator),可以在文档中找到。
2.创建SOAP请求:根据要调用的方法创建一个SOAP请求。
SOAP 请求是一个XML文档,根据服务的定义,包含要调用的方法名和方法参数。
可以使用各种编程语言和工具来创建SOAP请求,如Java的JAX-WS、Python的suds等。
3.发送请求:将创建的SOAP请求发送给Web服务。
可以使用HTTP POST或其他协议将请求发送给服务的URL。
请求与服务之间的通信是通过HTTP协议完成的。
4.解析响应:接收到Web服务的响应后,需要解析响应的内容。
响应是一个XML文档,包含服务返回的数据。
同样,可以使用各种编程语言和工具来解析XML响应,提取所需的数据。
5.处理响应:根据需要处理响应的数据。
可以将数据保存到数据库中,显示在用户界面上,或者进行其他操作。
6.处理错误:如果在调用Web服务时发生错误,需要处理错误。
可能会遇到网络连接问题、服务不可用、权限问题等。
根据错误类型,可以采取不同的处理方式,如重试请求、记录错误信息等。
7.错误处理:同样重要的是处理错误。
如果在调用Web服务时发生错误,需要处理错误。
可能会遇到网络连接问题、服务不可用、权限问题等。
根据错误类型,可以采取不同的处理方式,如重试请求、记录错误信息等。
8.安全性:在调用Web服务时,需要确保数据的安全性。
可以使用加密和数字签名等技术来保护传输的数据。
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是一种非常重要的技术,它可以帮助我们实现分布式系统之间的通信,为企业级应用的开发提供了很大的便利。
cxf调用webservice服务时传递服务器验证需要的用户名密码

cxf调⽤webservice服务时传递服务器验证需要的⽤户名密码cxf通过wsdl2java⽣成客户端调⽤webservice时,如果服务器端需要通过⽤户名和密码验证,则客户端必须传递验证所必须的⽤户名和密码,刚开始想通过url传递⽤户名和密码,于是在wsdl⽂件中直接在<soap:address location 标记中添加加⼊⽤户名和密码,但是webservice 接收不到参数,此种⽅法⾏不通。
后来在接⼝⽅法调⽤前⽤BindingProvider 得到RequestContext,在其中设置了请求需要的⽤户名和密码,接⼝顺利通过验证,执⾏成功,具体代码如下:/*** 根据给定的参数执⾏接⼝程序** @param request* @return*/public ZPILOT01SSOCMMIF001CONResponse executeService(ZPILOT01SSOCMMIF001CON request) throws Exception {// 得到本地服务类MIZPILOT01SSOCMMIF001CONOutSynService service = new MIZPILOT01SSOCMMIF001CONOutSynService();// 得到接⼝的代理MIZPILOT01SSOCMMIF001CONOutSyn stub = service.getMIZPILOT01SSOCMMIF001CONOutSynPort();// 设置访问接⼝服务器的⽤户名和密码BindingProvider bp = (BindingProvider) stub;Map<String, Object> context = bp.getRequestContext();context.put(ERNAME_PROPERTY, XI_USER_NAME);context.put(BindingProvider.PASSWORD_PROPERTY, XI_PASSWORD);// 执⾏接⼝ZPILOT01SSOCMMIF001CONResponse response = stub.miZPILOT01SSOCMMIF001CONOutSyn(request);// 返回响应return response;}。
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,很不⽅便,如果同⼀个项⽬中则没有区别。
c调用webservice接口的方法

c调用webservice接口的方法随着互联网的发展,Web服务已经成为了各种应用程序之间进行数据交互的重要方式。
而WebService接口则是Web服务的一种实现方式,它使用标准的HTTP协议进行通信,可以跨平台、跨语言地进行数据交互。
本文将介绍如何使用C语言调用WebService接口的方法。
首先,我们需要了解WebService接口的基本原理。
WebService接口通常使用SOAP(Simple Object Access Protocol)协议进行通信,SOAP是一种基于XML的协议,用于在网络上交换结构化的信息。
因此,我们在使用C语言调用WebService接口时,需要使用C语言的XML解析库来解析SOAP消息。
接下来,我们需要选择一个合适的C语言的XML解析库。
目前比较常用的XML解析库有Expat、Libxml2等。
这些库都提供了C语言的API,可以方便地解析XML文档。
我们可以根据自己的需求选择合适的库进行使用。
在开始调用WebService接口之前,我们需要了解接口的具体信息,包括接口的URL、请求方法、请求参数等。
通常,我们可以通过查阅接口的文档或者与接口提供方进行沟通来获取这些信息。
接下来,我们可以使用C语言的网络编程库来发送HTTP请求。
C语言提供了一些网络编程库,如libcurl等,可以方便地发送HTTP请求。
我们可以使用这些库来发送SOAP消息给WebService接口,并接收返回的SOAP消息。
在发送SOAP消息之前,我们需要根据接口的要求构造SOAP消息的XML文档。
我们可以使用C语言的XML解析库来构造XML文档,然后将XML文档转换为字符串,作为SOAP消息的内容发送给WebService接口。
当我们发送SOAP消息后,接口会返回一个SOAP消息作为响应。
我们可以使用C语言的网络编程库接收响应,并使用XML解析库解析响应的XML文档。
根据接口的要求,我们可以从XML文档中提取出需要的数据。
WebService接口的几种调用方式--wsdl文件类型

WebService接⼝的⼏种调⽤⽅式--wsdl⽂件类型⾸先⽐如查询到的⼀个wsdl⽂件内容如下:<?xml version="1.0" encoding="UTF-8"?><wsdl:definitions targetNamespace="http://198.168.0.88:6888/ormrpc/services/EASLogin" xmlns:apachesoap="/xml-soap" xmlns:impl="http://198.168.0.88:6888/ormrpc/services/EASLogin" xmlns:intf="http://198.168.0.88:68 <!--WSDL created by Apache Axis version: 1.4Built on Apr 22, 2006 (06:55:48 PDT)--><wsdl:types><schema targetNamespace="urn:client" xmlns="/2001/XMLSchema"><import namespace="/soap/encoding/"/><complexType name="WSContext"><sequence><element name="dbType" type="xsd:int"/><element name="dcName" nillable="true" type="xsd:string"/><element name="password" nillable="true" type="xsd:string"/><element name="sessionId" nillable="true" type="xsd:string"/><element name="slnName" nillable="true" type="xsd:string"/><element name="userName" nillable="true" type="xsd:string"/></sequence></complexType></schema></wsdl:types><wsdl:message name="logoutResponse"><wsdl:part name="logoutReturn" type="xsd:boolean"></wsdl:part></wsdl:message><wsdl:message name="loginResponse"><wsdl:part name="loginReturn" type="tns1:WSContext"></wsdl:part></wsdl:message><wsdl:message name="loginRequest"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="password" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part><wsdl:part name="dbType" type="xsd:int"></wsdl:part><wsdl:part name="authPattern" type="xsd:string"></wsdl:part></wsdl:message><wsdl:message name="loginResponse1"><wsdl:part name="loginReturn" type="tns1:WSContext"></wsdl:part></wsdl:message><wsdl:message name="logoutRequest"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part></wsdl:message><wsdl:message name="loginResponse2"><wsdl:part name="loginReturn" type="tns1:WSContext"></wsdl:part></wsdl:message><wsdl:message name="loginRequest1"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="password" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part><wsdl:part name="dbType" type="xsd:int"></wsdl:part></wsdl:message><wsdl:message name="loginByLtpaTokenRequest"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="ltpaToken" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part><wsdl:part name="dbType" type="xsd:int"></wsdl:part></wsdl:message><wsdl:message name="loginRequest2"><wsdl:part name="userName" type="xsd:string"></wsdl:part><wsdl:part name="password" type="xsd:string"></wsdl:part><wsdl:part name="slnName" type="xsd:string"></wsdl:part><wsdl:part name="dcName" type="xsd:string"></wsdl:part><wsdl:part name="language" type="xsd:string"></wsdl:part><wsdl:part name="dbType" type="xsd:int"></wsdl:part><wsdl:part name="authPattern" type="xsd:string"></wsdl:part><wsdl:part name="isEncodePwd" type="xsd:int"></wsdl:part></wsdl:message><wsdl:message name="loginByLtpaTokenResponse"><wsdl:part name="loginByLtpaTokenReturn" type="tns1:WSContext"></wsdl:part></wsdl:message><wsdl:portType name="EASLoginProxy"><wsdl:operation name="logout" parameterOrder="userName slnName dcName language"><wsdl:input message="impl:logoutRequest" name="logoutRequest"></wsdl:input><wsdl:output message="impl:logoutResponse" name="logoutResponse"></wsdl:output></wsdl:operation><wsdl:operation name="login" parameterOrder="userName password slnName dcName language dbType authPattern"> <wsdl:input message="impl:loginRequest" name="loginRequest"></wsdl:input><wsdl:output message="impl:loginResponse" name="loginResponse"></wsdl:output></wsdl:operation><wsdl:operation name="login" parameterOrder="userName password slnName dcName language dbType"><wsdl:input message="impl:loginRequest1" name="loginRequest1"></wsdl:input><wsdl:output message="impl:loginResponse1" name="loginResponse1"></wsdl:output></wsdl:operation><wsdl:operation name="login" parameterOrder="userName password slnName dcName language dbType authPattern isEncodePwd"><wsdl:input message="impl:loginRequest2" name="loginRequest2"></wsdl:input><wsdl:output message="impl:loginResponse2" name="loginResponse2"></wsdl:output></wsdl:operation><wsdl:operation name="loginByLtpaToken" parameterOrder="userName ltpaToken slnName dcName language dbType"><wsdl:input message="impl:loginByLtpaTokenRequest" name="loginByLtpaTokenRequest"></wsdl:input><wsdl:output message="impl:loginByLtpaTokenResponse" name="loginByLtpaTokenResponse"></wsdl:output></wsdl:operation></wsdl:portType><wsdl:binding name="EASLoginSoapBinding" type="impl:EASLoginProxy"><wsdlsoap:binding style="rpc" transport="/soap/http"/><wsdl:operation name="logout"><wsdlsoap:operation soapAction=""/><wsdl:input name="logoutRequest"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="" use="encoded"/> </wsdl:input><wsdl:output name="logoutResponse"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="http://198.168.0.88:6888/ormrpc/services/EASLogin" use="encoded"/> </wsdl:output></wsdl:operation><wsdl:operation name="login"><wsdlsoap:operation soapAction=""/><wsdl:input name="loginRequest"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="" use="encoded"/> </wsdl:input><wsdl:output name="loginResponse"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="http://198.168.0.88:6888/ormrpc/services/EASLogin" use="encoded"/> </wsdl:output></wsdl:operation><wsdl:operation name="login"><wsdlsoap:operation soapAction=""/><wsdl:input name="loginRequest1"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="" use="encoded"/> </wsdl:input><wsdl:output name="loginResponse1"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="http://198.168.0.88:6888/ormrpc/services/EASLogin" use="encoded"/> </wsdl:output></wsdl:operation><wsdl:operation name="login"><wsdlsoap:operation soapAction=""/><wsdl:input name="loginRequest2"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="" use="encoded"/> </wsdl:input><wsdl:output name="loginResponse2"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="http://198.168.0.88:6888/ormrpc/services/EASLogin" use="encoded"/> </wsdl:output></wsdl:operation><wsdl:operation name="loginByLtpaToken"><wsdlsoap:operation soapAction=""/><wsdl:input name="loginByLtpaTokenRequest"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="" use="encoded"/> </wsdl:input><wsdl:output name="loginByLtpaTokenResponse"><wsdlsoap:body encodingStyle="/soap/encoding/" namespace="http://198.168.0.88:6888/ormrpc/services/EASLogin" use="encoded"/> </wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="EASLoginProxyService"><wsdl:port binding="impl:EASLoginSoapBinding" name="EASLogin"><wsdlsoap:address location="http://198.168.0.88:6888/ormrpc/services/EASLogin"/></wsdl:port></wsdl:service></wsdl:definitions>⼀般有⼏种⽅式调⽤此接⼝:⽅式⼀:通过wsdl⽂件或者链接使⽤相关IDE软件⽣成Java⽂件这种⽅式⽐较累赘,不做推荐,使⽤IDE软甲即可完成⽅式⼆:使⽤apache的动态代理⽅式实现话不多说,直接上代码:import .URL;import space.QName;import org.apache.axis.client.Call;import org.apache.axis.client.Service;public class UsingDII {public static void main(String[] args) {try {int a = 100, b=60; // 对应的targetNamespaceString endPoint = "http://198.168.0.88:6888/ormrpc/services/EASLogin";Service service = new Service();Call call = (Call)service.createCall();call.setOperationName(new QName(endPoint,"EASLogin"));call.setTargetEndpointAddress(new URL(endPoint)); // a,b 调⽤此⽅法的参数String result = (String)call.invoke(new Object[]{new Integer(a),new Integer(b)});System.out.println("result is :"+result);} catch (Exception e) {e.printStackTrace();}}}⽅式三:使⽤Dynamic Proxy动态代理import .URL;import javax.xml.*;public class UsingDP {public static void main(String[] args) {try {int a = 100, b=60;String wsdlUrl = "http://198.168.0.88:6888/ormrpc/services/EASLogin?wsdl";String nameSpaceUri = "http://198.168.0.88:6888/ormrpc/services/EASLogin";String serviceName = "EASLoginProxyService";String portName = "EASLogin";ServiceFactory serviceFactory = ServiceFactory.newInstance();Service service = serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri,serviceName)); // 返回值是⾃⼰封装的类AddFunctionServiceIntf adsIntf = (AddFunctionServiceIntf)service.getPort(new QName(nameSpaceUri,portName),AddFunctionServiceIntf.class); System.out.println("result is :"+adsIntf.addInt(a, b));} catch (Exception e) {e.printStackTrace();}}}⽅式四:使⽤httpclient⽅式参考:直接上代码:import java.io.ByteArrayInputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import mons.httpclient.HttpClient;import mons.httpclient.methods.InputStreamRequestEntity;import mons.httpclient.methods.PostMethod;import mons.httpclient.methods.RequestEntity;import org.apache.log4j.Logger;import org.dom4j.Document;import org.dom4j.io.SAXReader;// 这⾥引得依赖包的话需要⾃⼰找了下⾯地址可以找到//https:///public static InputStream postXmlRequestInputStream(String requestUrl, String xmlData) throws IOException{PostMethod postMethod = new PostMethod(requestUrl);byte[] b = xmlData.getBytes("utf-8");InputStream is = new ByteArrayInputStream(b, 0, b.length);RequestEntity re = new InputStreamRequestEntity(is, b.length, "text/xml;charset=utf-8");postMethod.setRequestEntity(re);HttpClient httpClient = new HttpClient();httpClient.getParams().setAuthenticationPreemptive(true);httpClient.getHostConfiguration().setProxy(CommonPptsUtil.get("PROXY_HOST"), Integer.valueOf(CommonPptsUtil.get("PROXY_PORT")));int statusCode = httpClient.executeMethod(postMethod);logger.debug("responseCode:"+statusCode);if (statusCode != 200) {return null;}return postMethod.getResponseBodyAsStream();}public static void main(String[] args) {String reqJsonStr = "{\"workId\":\"20171018161622\",\"status\":\"201\",\"startTime\":\"2017-10-18 16:16:22\"}";String xmlData = "<soapenv:Envelope xmlns:soapenv=\"/soap/envelope/\" xmlns:ser=\"/\"><soapenv:Header/><soapenv:Body><ser:statusWriteBack><jsonString>" + "{\"workId\":\"314\",\"orderId\":\"5207675\",\"longitude\":\"104.068310\",\"latitude\":\"30.539503\",\"sendTime\":\"2019-08-13 08:38:45\",\"servicePerName\":\"于xx\",\"servicePerPhone\":\"184xxxx7680\"}"+ "</jsonString></ser:statusWriteBack></soapenv:Body></soapenv:Envelope>";String url = "http://xx.xxx.246.88:7103/avs/services/CCService?wsdl";SAXReader reader = new SAXReader();String result = "";try {InputStream in = postXmlRequestInputStream(url,xmlData);if(in!=null){Document doc = reader.read(in);result = doc.getRootElement().element("Body").element("statusWriteBackResponse").element("return").getText();logger.debug("result:"+result);}} catch (Exception e) {logger.error("error:",e);e.printStackTrace();}}}CommonPptsUtil://就是获取配置⽂件⾥的代理信息import mons.configuration.ConfigurationException;import mons.configuration.PropertiesConfiguration;import mons.configuration.reloading.FileChangedReloadingStrategy;import org.apache.log4j.Logger;/*** 通⽤属性⽂件⼯具类** @author y.c**/public class CommonPptsUtil {private static final Logger logger = Logger.getLogger(CommonPptsUtil.class);private static final String CONFIG_FILE = "common.properties";private static PropertiesConfiguration ppts;static {try {ppts = new PropertiesConfiguration(CONFIG_FILE);ppts.setReloadingStrategy(new FileChangedReloadingStrategy());} catch (ConfigurationException e) {logger.error("⽂件【common.properties】加载失败!");ppts = null;}}/*** 获取属性值** @param key* @return属性值*/public static String get(String key) {if (ppts == null) {return null;}return ppts.getString(key);}}⽅式五:使⽤CXF动态调⽤webservice接⼝代码如下:参考:package cxfClient;import org.apache.cxf.endpoint.Endpoint;import space.QName;import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;import org.apache.cxf.service.model.BindingInfo;import org.apache.cxf.service.model.BindingOperationInfo;public class CxfClient {public static void main(String[] args) throws Exception {String url = "http://localhost:9091/Service/SayHello?wsdl";String method = "say";Object[] parameters = new Object[]{"我是参数"};System.out.println(invokeRemoteMethod(url, method, parameters)[0]);}public static Object[] invokeRemoteMethod(String url, String operation, Object[] parameters){JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();if (!url.endsWith("wsdl")) {url += "?wsdl";}org.apache.cxf.endpoint.Client client = dcf.createClient(url);//处理webService接⼝和实现类namespace不同的情况,CXF动态客户端在处理此问题时,会报No operation was found with the name的异常Endpoint endpoint = client.getEndpoint();QName opName = new QName(endpoint.getService().getName().getNamespaceURI(),operation);BindingInfo bindingInfo= endpoint.getEndpointInfo().getBinding();if(bindingInfo.getOperation(opName) == null){for(BindingOperationInfo operationInfo : bindingInfo.getOperations()){if(operation.equals(operationInfo.getName().getLocalPart())){opName = operationInfo.getName();break;}}}Object[] res = null;try {res = client.invoke(opName, parameters); } catch (Exception e) {e.printStackTrace();}return res;}}。
webservice 接口调用规则

Web服务接口调用规则是用于规范和描述如何与Web应用程序交互的一组协议和规范。
这些规则通常包括以下方面:1. URL:Web服务接口的统一资源定位符(URL)用于标识接口的位置。
通常,URL 遵循这样的格式:`scheme://hostname[:port]/path`。
其中,scheme表示协议(如http或https),hostname表示服务器的主机名,port表示服务器的端口号,path表示接口的路径。
2. 请求方法:Web服务接口通常支持多种HTTP请求方法,如GET、POST、PUT、DELETE等。
这些方法用于指定对资源的操作类型。
3. 请求参数:请求参数是传递给Web服务接口的数据。
它们可以包含在URL中(对于GET方法)或在请求体中(对于POST、PUT和DELETE方法)。
参数通常采用键值对的形式,其中键表示参数名,值表示参数值。
4. 请求头:请求头包含在HTTP请求中,用于传递有关请求的其他信息,如内容类型、编码格式、认证信息等。
5. 请求体:请求体是用于传递具体数据的HTTP请求部分。
它通常包含在POST、PUT 和DELETE请求中。
请求体可以采用不同的格式,如JSON、XML或表单数据。
6. 响应状态码:Web服务接口返回的HTTP响应状态码用于表示请求的结果。
状态码通常是一个三位数,其中,2xx表示成功,3xx表示重定向,4xx表示客户端错误,5xx表示服务器错误。
7. 响应头:响应头包含在HTTP响应中,用于传递有关响应的其他信息,如内容类型、编码格式、认证信息等。
8. 响应体:响应体是用于传递具体数据的HTTP响应部分。
它通常包含在2xx状态码的响应中。
响应体可以采用不同的格式,如JSON、XML或HTML。
9. 认证和授权:Web服务接口可能需要进行认证和授权,以确保只有具有相应权限的用户才能访问。
这通常通过在请求头中传递认证凭据(如用户名和密码)或使用令牌(如JWT)来实现。
WebService案例Springboot+CXF开发WebServiceDemo

WebService案例Springboot+CXF开发WebServiceDemo ⼀、本次开发除了⽤到spring boot基础jar包外,还⽤到了cxf相关jar包:1 <!-- cxf⽀持 -->2 <dependency>3 <groupId>org.apache.cxf</groupId>4 <artifactId>cxf-rt-frontend-jaxws</artifactId>5 <version>3.1.6</version>6 </dependency>7 <dependency>8 <groupId>org.apache.cxf</groupId>9 <artifactId>cxf-rt-transports-http</artifactId>10 <version>3.1.6</version>11 </dependency>⼆、⾸先我们创建⼀个实体类,内容是关于⽤户信息的查询和记录:1 import java.io.Serializable;2 import java.util.Date;34 public class User implements Serializable {56 private static final long serialVersionUID = -5939599230753662529L;7 private String userId;8 private String username;9 private String age;10 private Date updateTime;11 //getter setter ......12 public void setUserId(String userId) {13 erId=userId;14 }15 public void setUsername(String username) {16 ername=username;17 }18 public void setAge(String age) {19 this.age=age;20 }21 public void setUpdateTime(Date updateTime) {22 this.updateTime=updateTime;23 }242526 public String getUserId() {27 return userId;28 }29 public String getUserName() {30 return username;31 }32 public String getAge() {33 return age;34 }35 public Date getUpdateTime() {36 return updateTime;37 }38 }三、接下来我们创建接⼝类:1 import javax.jws.WebMethod;2 import javax.jws.WebParam;3 import javax.jws.WebService;45 import er;678 @WebService9 public interface UserService {1011 @WebMethod12 String getName(@WebParam(name = "userId") String userId);13 @WebMethod14 User getUser(String userId);15 }四、有了接⼝类,那么接下来我们对接⼝进⾏实现,也就是接⼝实现类(也就是业务类)代码:1 package cn.paybay.demo.service.impl;23 import java.util.Date;4 import java.util.HashMap;5 import java.util.Map;6789 import javax.jws.WebService;1011 import er;12 import erService;1314 @WebService(targetNamespace="/",endpointInterface = "erService")15 public class UserServiceImpl implements UserService{1617 private Map<String, User> userMap = new HashMap<String, User>();18 public UserServiceImpl() {19 System.out.println("向实体类插⼊数据");20 User user = new User();21 user.setUserId("411001");22 user.setUsername("zhansan");23 user.setAge("20");24 user.setUpdateTime(new Date());25 userMap.put(user.getUserId(), user);2627 user = new User();28 user.setUserId("411002");29 user.setUsername("lisi");30 user.setAge("30");31 user.setUpdateTime(new Date());32 userMap.put(user.getUserId(), user);3334 user = new User();35 user.setUserId("411003");36 user.setUsername("wangwu");37 user.setAge("40");38 user.setUpdateTime(new Date());39 userMap.put(user.getUserId(), user);40 }41 @Override42 public String getName(String userId) {43 return "liyd-" + userId;44 }45 @Override46 public User getUser(String userId) {47 System.out.println("userMap是:"+userMap);48 return userMap.get(userId);49 }5051 }注释(PS):在发布服务之前,我们要在这⾥对业务实现类进⾏⼀下说明,请⼤家看下图箭头指向的⽅框部分(图⼀)下⾯我来解释⼀下加上图⽅框箭头所指代码的⽬的:/:这是我的业务类所在路径;/:这是我的接⼝类所在路径;在不加上图⽅框箭头所指代码的情况下,你最后发服务的结果是这样的(如下图):(图⼆)并且会在你进⾏客户端调⽤的时候回报错:No operation was found with the name {/}getUser.那么原因就是:在CXF发布服务的时候,发布的是业务类(UserServiceImpl.java),那么默认的命名空间就会是业务类所在包(路径),⽽对外界暴露的则是接⼝类(UserService.java),那么对于客户端调⽤的时侯,需要按照接⼝类所在路径进⾏命名空所以在发布之前我们要在业务类(UserServiceImpl.java)上增加注解,指定命名空间,然后再进⾏发布,那么我们最终在加上(图⼀)⽅框箭头所指代码情况下,发布服务的结果为下图(请看图三):(图三)五、(发布服务)接⼝类,业务类代码都已经准备好,那么我接下来我就要对webservice服务进⾏发布:代码如下:1 23 import javax.xml.ws.Endpoint;45 import org.apache.cxf.Bus;6 import org.apache.cxf.bus.spring.SpringBus;7 import org.apache.cxf.jaxws.EndpointImpl;8 import org.apache.cxf.transport.servlet.CXFServlet;9 import org.springframework.boot.web.servlet.ServletRegistrationBean;10 import org.springframework.context.annotation.Bean;11 import org.springframework.context.annotation.Configuration;1213 import erService;14 import erServiceImpl;151617 @Configuration18 public class TestConfig {1920 @Bean21 public ServletRegistrationBean dispatcherServlet() {22 return new ServletRegistrationBean(new CXFServlet(), "/test/*");23 }24 @Bean(name = Bus.DEFAULT_BUS_ID)25 public SpringBus springBus() {26 return new SpringBus();27 }28 @Bean29 public UserService userService() {30 return new UserServiceImpl();31 }32 @Bean33 public Endpoint endpoint() {34 EndpointImpl endpoint = new EndpointImpl(springBus(), userService());35 endpoint.publish("/user");36 return endpoint;37 }3839 }那么到这⾥呢,我们的所有的步骤基本完成了,启动spring boot 然后再浏览器中输⼊url:http://localhost:8080/webservice/test/user?wsdl可以看到有相关的wsdl描述信息输出了,说明服务已经发布了。
webservice 接口调用规则

webservice 接口调用规则全文共四篇示例,供读者参考第一篇示例:Webservice是一种基于网络的通信协议,通过HTTP协议进行数据交换的一种技术。
在现代的软件开发中,使用Webservice接口可以方便不同系统之间的数据交换和通信。
在实际的开发过程中,了解和遵循Webservice接口调用规则是非常重要的,可以确保系统之间的正常通信和数据交换。
下面我们就来介绍一些关于Webservice接口调用规则的内容。
1. 接口文档的重要性在使用Webservice接口进行开发之前,首先需要阅读并了解相关的接口文档。
接口文档通常包括接口的详细说明、参数的说明、返回结果的格式等内容。
通过仔细阅读接口文档,开发人员可以清楚地了解接口的使用方法和规则,从而能够正确地调用接口,并处理返回的数据。
2. 参数的传递方式在调用Webservice接口时,通常需要传递一些参数给接口,以便接口能够正确地处理请求并返回相应的结果。
在传递参数时,需要遵循一定的规则,例如参数的格式、参数的类型等。
通常情况下,参数可以通过URL的查询字符串传递,也可以通过POST请求的正文传递。
开发人员需要根据接口文档的要求,正确地传递参数给接口。
3. 接口的认证和授权为了保证接口的安全性,通常需要进行接口的认证和授权。
接口的认证可以通过用户名和密码进行,也可以通过令牌进行。
在调用接口时,需要正确地提供认证信息,以便接口能够验证请求的合法性。
接口还需要进行授权,即检查调用者是否有权限调用接口。
开发人员需要明确了解接口的认证和授权规则,并正确地进行认证和授权。
4. 接口的错误处理在调用Webservice接口时,可能会出现一些错误,例如网络故障、参数错误等。
在接口返回错误时,开发人员需要正确地处理错误,例如记录错误日志、返回错误信息等。
接口也应该提供清晰的错误码和错误信息,以便调用者能够及时地识别和处理错误。
开发人员需要根据接口文档中定义的错误码和错误信息,正确地处理接口返回的错误。
cxf WebService设置wsdl中soapAction的值

cxf WebService设置wsdl中soapAction的值用cxf开发一个WebService很简单,只需要下面几步:1.定义接口public interface HelloService {String hello();}2.实现public class HelloServiceImpl implements HelloService {@Overridepublic String hello() {return "hi,my name is gyoung ";}}3.用ServerFactoryBean生成服务复制代码public static void main(String[] args) {HelloServiceImpl helloworldImpl = new HelloServiceImpl();//cxf发布服务的工厂beanServerFactoryBean svrFactory = new ServerFactoryBean();//设置服务类svrFactory.setServiceClass(HelloService.class);//设置服务地址svrFactory.setAddress("http://localhost:9001/Hello");//设置服务beansvrFactory.setServiceBean(helloworldImpl);svrFactory.create();}复制代码这样,一个简单的HelloWorld服务便生成成功了。
但是,这样生成的服务有一个问题,wsdl中的soapAction属性是空的复制代码<wsdl:binding name="HelloServiceSoapBinding" type="tns:HelloServicePortType"><soap:binding style="document" transport="/soap/http"/> <wsdl:operation name="hello"><soap:operation soapAction="" style="document"/><wsdl:input name="hello"><soap:body use="literal"/></wsdl:input><wsdl:output name="helloResponse"><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding>复制代码这一段<soap:operation soapAction="" style="document"/>,如果是.net生成的服务,soapAction是有值的复制代码<wsdl:binding name="WebService1Soap" type="tns:WebService1Soap"><soap:binding transport="/soap/http"/><wsdl:operation name="HelloWorld"><soap:operation soapAction="/HelloWorld" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding>复制代码查看了很久的源码,才发现,设置cxf设置soapAction是在org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean类中它会去循环遍历serviceConfigurations,调用其getAction方法来获取action的值。
【案例】Springboot开发WebService服务端和客户端

【案例】Springboot开发WebService服务端和客户端环境说明Java JDK 1.8、Spring boot 2.1.6、Apache CXF 3.1.6POM依赖<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.6</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.1.6</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.1.6</version></dependency></dependencies>服务端webService接⼝使⽤@WebService声明式注解声明这是⼀个webService接⼝,并设置:name:服务名称targetNamespace:命名空间,通常是接⼝的包名倒序注解@WebMethod是声明接⼝⽅法,可以通过operationName为接⼝⽅法设置别名,默认是⽅法名。
webservice学习之使用Apache CXF和spring搭建webservice

webservice学习之使用Apache CXF和spring搭建webservice分类:java 2013-04-03 15:04 285人阅读评论(0) 收藏举报[html]view plaincopy1.1. websrvice概述:(1)webservice的出现可以解决不同平台、不同语言所编写的应用之间相互调用的问题。
(2)webservice不是框架,甚至不是一种技术,而是一种跨平台、跨语言的规范。
2.webservice解决三个问题:(1)远程调用(2)跨平台调用(3)跨语言调用3.实际用途(1)同一个公司新旧系统整合(2)不同公司的业务整合。
比如不同电商调用快递公司的订单查询系统(3)内容聚合。
比如一个应用需要提供天气预报、股票查询、黄金行情等等,需要内容聚合,调用到两不同平台、不同语言开发的应用方法。
4.CXF。
apache基金会的一个开源项目,可以说是SOA框架。
5.webservice的开发:(1)引入spring与cxf需要的jar包:(2)每个webservice组件需要两个部分:接口和实现类.所以建立一个webservice业务接口,使用@WebService注解。
[html]view plaincopy1.package demo.spring.service;2.3.import javax.jws.WebService;4.5.6.@WebService7.public interface HelloWorld {8. String sayHi(String text);9.}(3)定义一个webservice的实现类,实现第二步中定义的接口,也是使用@WebService修饰,但需要指定属性,一般是两个:endpointInterface:当前实现类实现的接口,serviceName:业务名称,可以自行定义[html]view plaincopy1.package demo.spring.service;2.3.import javax.jws.WebService;4.5.import ponent;6.7.@Component("hello")8.@WebService(endpointInterface = "demo.spring.service.HelloWorld")9.public class HelloWorldImpl implements HelloWorld {10.11. public String sayHi(String text) {12. System.out.println("sayHi called");13. return "Hello " + text;14. }15.}(4)配置spring与cxf的配置文件这里定义两个,一个用于server,一个用于client:cxf-servlet.xml:红色部分的配置一定要添加,用于server配置[html]view plaincopy1.<beans xmlns="/schema/beans"2. xmlns:xsi="http://www.w/2001/XMLSchema-instance" <span style="color:#ff0000;">xmlns:jaxws="/jaxws"</span>3. xmlns:context="/schema/context"4. xsi:schemaLocation="/schema/beans5. /schema/beans/spring-beans.xsd6. <span style="color:#ff0000;">/jaxws</span> <span style="color:#ff0000;">/schemas/jaxws.x sd</span>7. /schema/context8. /schema/context/spring-context.xsd">9.10.11. <import resource="classpath:META-INF/cxf/cxf.xml" />12. <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />13. <context:annotation-config />14. <context:component-scan base-package="demo.spring" />15.16. <jaxws:endpoint id="helloWorld" implementor="#hello"17. address="/HelloWorld" />18.19.</beans>id:webservice的endpoint的id。
CXF3.0.2+Spring3.2.14 WebService入门实例四

这次学习CXF WebService传输文件。
CXF采用的是MTOM的机制进行文件传输。
MTOM(Message Transmission Optimization Mechanism)消息优化传输机制。
消息传输优化机制(MTOM) 标准允许将消息中包含的大型数据元素外部化,并将其作为无任何特殊编码的二进制数据随消息一起传送。
MTOM 消息会打包为多部分/相关MIME 序列,放在SOAP 消息中一起传送。
但是在大量数据情况下,如果数据依然进行Base64编码,会带来33%的额外开销,这样的情况对于大量数据交换的情况是无法容忍的。
MTOM 就是针对SOAP 消息传输的基础上提出的改进办法。
对于大量数据的传递,不会进行进行Base64编码,而是直接以附件的二进制原始数据的形式封装在SOAP消息的MIME 部分,进行传输。
………此处略去1000字,自己百度补齐………首先还是要介绍一下开发工具和开发环境,jdk1.6.0_43+Tomcat6.0.29+ MyEclipse10.5,没有使用Maven进行管理!继续学习达拉斯母牛的CXF实战之传输文件(六),博客地址:/accountwcx/article/details/47165321 一、新建web工程,选择Java EE5.0二、新建文件传输类CxfFileWrapper.javapackage com.util;import javax.activation.DataHandler;import javax.xml.bind.annotation.XmlMimeType;import javax.xml.bind.annotation.XmlType;/*** 类名: CxfFileWrapper.java* 作者: 张述飞* 创建时间: 2016-1-7下午2:35:44* 版本: V1.0* 功能描述: CXF上传和下载文件对象包装类由于CXF的DataHandler无法获取文件名和文件类型,需要在上传和下载时附带文件名*/@XmlType(name = "cxfFileWrapper")public class CxfFileWrapper {//文件名private String fileName;//文件扩展名private String fileExtension;//文件二进制数据private DataHandler file;public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public String getFileExtension() {return fileExtension;}public void setFileExtension(String fileExtension) {this.fileExtension = fileExtension;}//注解该字段为二进制流@XmlMimeType("application/octet-stream")public DataHandler getFile() {return file;}public void setFile(DataHandler file) {this.file = file;}}三、新建接口类FileInterface.javapackage com.util;import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;import javax.xml.ws.soap.MTOM;/*** 类名: FileInterface.java* 作者: 张述飞* 创建时间: 2016-1-12上午8:24:05* 版本: V1.0* 功能描述:接口类* 说明:@MTOM注解非常重要,如果不写,那么下载文件时会报内存溢出的错误!2016-1-8 15:14:29 org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet CXFService threw exceptionng.OutOfMemoryError: Java heap spaceatcom.sun.xml.bind.v2.util.ByteArrayOutputStreamEx.readFrom(ByteArrayOu tputStreamEx.java:75)……………………………*/@WebService(name="fileInterface")@MTOMpublic interface FileInterface {/*** 文件上传* @param file* @return*/@WebMethodpublic boolean upload(@WebParam(name = "file") CxfFileWrapper file);/*** 文件下载* @return* @throws Exception*/@WebMethodpublic CxfFileWrapper download();}四、新建接口实现类FileInterfaceImpl.javapackage com.util;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.activation.DataHandler;import javax.activation.DataSource;import javax.activation.FileDataSource;import javax.jws.WebService;@WebService(endpointInterface="com.util.FileInterface",portName="FileInterPort")public class FileInterfaceImpl implements FileInterface {public boolean upload(CxfFileWrapper file) {boolean result = true;OutputStream os = null;InputStream is = null;BufferedOutputStream bos = null;try {is = file.getFile().getInputStream();/*** 注必须先在D盘新建文件夹newFilejava.io.FileNotFoundException: d:\newFile\LoginDB.bak (系统找不到指定的路径。
CXF框架webservice教程

CXF框架实现webservice教程1 使用CXF实现一个简单的WEB SERVICE首先介绍如何用CXF实现一个基本的hello world首先到apache官网去下载CXF的开发jar包//cxf/2.4.3/apache-cxf-2.4.3.zip创建cxf webservice服务器端普通java项目,叫做HelloCxfServer,把必须用到的jar文件通过构建路径引入,为了省事,可以直接把所有的jar引入此处注意:如果是jdk1.6启动服务器会发生如下错误JAXB 2.1 API is being loaded from the bootstrap classloader, but this RI (from jar:file:/E:/javaLib/cxf_all_jar/jaxb-impl-2.2.1.1.jar!/com/sun/xml/bind/v2/model/impl/ModelBuilder.class) needs 2.2 API. Use the endorsed directory mechanism to place jaxb-api.jar in the bootstrap classloader.这是由于jdk1.6的jar包和cxf的jar包冲突造成的,需要把cxf lib中的endorsed目录拷入到D:\Program Files\Java\jdk1.6.0\jre\lib目录下创建一个接口HelloWorld和一个实现类HelloWorldImpl,只提供一个成员方法,叫做sayHello,给接口和实现类添加注解@WebService,这是最基本的注解/test/HellWorld.java源码package test;import javax.jws.WebService;@WebServicepublic interface HelloWorld {String sayHello(String name);}/test/HelloWorldImpl.java源码package test;import javax.jws.WebService;@WebServicepublic class HelloWorldImpl implements HelloWorld {@Overridepublic String sayHello(String name) {System.out.println("sayHello方法被调用...");return"hello," + name;}}CXF自带了一个Web Service容器Jetty,这是一个WEB容器,类似于tomcat,能够直接发布web service,下面创建一个发布服务类MainServer,执行这个类就会运行服务器,看到控制台输出日志信息,表示启动服务成功/test/MainServier.java源码package test;import org.apache.cxf.endpoint.Server;import org.apache.cxf.jaxws.JaxWsServerFactoryBean;public class MainServer {public static void main(String[] args) {//创建一个JaxWs服务器工厂JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();//设置发布类factory.setServiceClass(HelloWorldImpl.class);//设置服务发布的地址factory.setAddress("http://localhost:6666/MyCxfService");//根据设置创建一个服务器Server server = factory.create();//启动服务器server.start();}}发布成功以后,可以通过浏览器去查看生成的WSDL,在浏览器地址栏输入http://localhost:6666/MyCxfService?wsdl,效果如下:下面创建访问WebService的客户端,可以重新创建一个项目,也可以就在这个项目里实现,我下面在同一个项目中创建一个类HelloWorldCient/test/HelloWorldClient.java源码package test;import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;import org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean;public class HelloWorldClient {public static void main(String[] args) {//创建一个JaxWs的代理工厂JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();//设置访问地址factory.setAddress("http://localhost:6666/MyCxfService");//设置接口类型factory.setServiceClass(HelloWorld.class);//获得代理类实例HelloWorld helloWorld = (HelloWorld) factory.create();//调用方法String str = helloWorld.sayHello("张三");System.out.println(str);}}运行客户端,会看到控制台,输出:hello,张三2 WSDL结构分析主要通过上一章生成的WSDL,来对WSDL语言的标签进行解释Web Services Description Language的缩写,是一个用来描述Web服务和说明如何与Web服务通信的XML 语言。
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。
webservice接口调用方式简书

Webservice接口调用方式简介一、什么是Webservice接口?Webservice是一种基于网络的通信协议,用于不同应用程序之间的数据交换。
它使用标准的HTTP协议传输数据,并通过XML格式进行数据封装和传递。
Webservice接口提供了一种跨平台、跨语言的数据交互方式,使得不同系统之间可以方便地进行数据交流和共享。
二、Webservice接口的调用方式Webservice接口的调用方式有多种,常见的有以下几种:1. SOAP调用方式SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,用于在Web上交换结构化的和类型化的信息。
SOAP调用方式是Webservice接口最常见的调用方式之一。
SOAP调用方式的特点是使用XML格式封装请求和响应数据,并使用HTTP协议进行传输。
在SOAP调用中,客户端通过发送一个SOAP请求给服务端,服务端接收到请求后进行处理,并将处理结果封装在一个SOAP响应中返回给客户端。
SOAP调用方式的优点是使用了标准的HTTP协议和XML格式,具有跨平台、跨语言的特性,可以方便地实现不同系统之间的数据交换和共享。
2. RESTful调用方式RESTful(Representational State Transfer)是一种基于HTTP协议的架构风格,用于构建网络上的分布式系统。
RESTful调用方式是Webservice接口中另一种常见的调用方式。
RESTful调用方式的特点是使用HTTP的GET、POST、PUT、DELETE等方法来进行资源的操作。
客户端通过发送HTTP请求给服务端,服务端根据请求的方法进行相应的处理,并将处理结果以HTTP响应的形式返回给客户端。
RESTful调用方式的优点是简单、轻量级,易于理解和使用。
它适用于构建简单的、无状态的接口,特别适合移动应用和Web前端的调用。
3. JSON-RPC调用方式JSON-RPC(Remote Procedure Call)是一种基于JSON格式的远程过程调用协议,用于在网络上调用远程方法。
webservice调用具体方法

webservice调用具体方法摘要:1.什么是WebService2.如何调用WebService的具体方法3.调用过程中可能遇到的问题及解决方法4.实战案例分享正文:WebService,即网络服务,是一种跨平台的、基于XML(可扩展标记语言)的分布式计算技术。
它使得应用程序之间可以通过互联网进行通信,实现数据的交换和共享。
在实际开发中,调用WebService的具体方法如下:1.首先,确定你需要调用的WebService的地址和协议。
通常,WebService的地址是以WSDL(Web服务描述语言)文件形式提供的。
你可以通过WSDL文件查看WebService提供的接口和方法。
2.根据WSDL文件,生成客户端代码。
这可以通过使用诸如Apache CXF、JAX-WS等开源库来实现。
这些库会根据WSDL文件自动生成客户端代码,包括调用WebService的方法和处理响应的代码。
3.在生成的客户端代码中,找到调用WebService的具体方法。
这个方法通常是一个带有HTTP请求头的Web方法,如POST、GET等。
在方法中,传入所需的参数,这些参数通常包括在WSDL文件中定义的输入参数。
4.发送HTTP请求,并将响应结果解析为JSON、XML等格式。
这一步可以通过使用如Jackson、Gson等库来实现。
5.处理响应结果,并根据需要进行相应的业务逻辑处理。
在调用WebService的过程中,可能会遇到以下问题:1.网络问题:由于WebService通常跨网络调用,因此可能会遇到网络不稳定、延迟等问题。
为了解决这个问题,可以考虑使用重试策略、增加超时设置等方法。
2.服务异常:WebService可能会因为各种原因抛出异常,如参数不合法、服务器故障等。
为了解决这个问题,可以实现异常处理机制,如使用try-catch语句捕获异常,并根据需要进行日志记录、通知等操作。
3.身份验证和授权问题:为了避免unauthorized access,WebService 通常需要进行身份验证和授权。
基于Spring+CXF实现用户文件上传的WebService

1 引 言
A a h X 是 一 个 开 源 的 S rie p ceC F ev s框 架 。C F 帮 助 您 利 c X
{
r t r i n me; e u nfe a l
) p bi v d s t i n me S r g fe a ) u l oi e Fl a ( ti i n me c e n l {
名 称 , 使 用 @We P r 注 释 来 声 明 传 人 变 量 名 称 ,代 码 片 b aa m
段 如下 :
p bi r gg t i n me ) u l Sti e Fl a ( c n e
、
1) 鑫与 6 -
;
…
…
P O R M N U G … … … … … ~ RGA L GAE A … … …… … … … . … …… … … ~ … … … … … … … …
{
rt r i t p e u nfe y e; l
行无缝集成 。
}
2 功 能分 析
( ) 该 We Srie需 要 提 供 报 文 上 传 到 服 务 器 上 的 基 本 1 be e v
功能 。
p bl od s t i t p (tig fey e u i v i e Fl y eS r i tp ) c e n l {
…
g l
II  ̄
…
…
l
,
‘
k
1
x
H
々 ‘
H
…
十
…
t
—
‘} 实用第一 来自智慧密集 。 6 1 I … _ f { … H ,I I x 日
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、CXF介绍Apache CXF=Celtix+XFire,Apache CXF的前身叫Apache CeltiXfire。
CXF继承了Celtix和XFire两大开源项目的精华,提供了对JAX-WS全面的支持,并且提供了多种Binding、DataBinding、Transport以及各种Format的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者WSDL优先(WSDL First)来轻松地实现Web Services的发布和使用。
Apache CXF已经是一个正式的Apache顶级项目。
CXF支持多种协议,如:SOAP、XML/HTTP、RESTful HTTP、CORBA,并且可以在多种传输协议上运行,比如:HTTP、JMS、JBI。
CXF可以与Spring进行无缝集成。
CXF框架是一种基于Servlet技术的SOA应用开发框架,要正常运行基于CXF应用框架开发的企业应用,除了CXF框架本身之外,还需要JDK和Servlet容器的支持。
CXF下载地址:/download.html,选择“File”列中的zip格式下载。
解压后可以看到一些文件夹:└─apache-cxf-2.5.0├─bin各种工具├─docs API文档├─etc各种配置文件├─lib开发所需jar包├─licenses说明├─modules jar包└─samples使用例子samples文件夹中给提供了在各种环境下使用的例子,个人感觉只需参照样例即可。
二、使用CXF+Spring编写并发布WebService首先,新建一个Web项目,名字叫cxftest,将下载的压缩包中lib文件夹下的jar包全部拷贝到项目的WEB-INF/lib中,在web.xml中配置如下:[html]view plaincopy1.<servlet>2.<servlet-name>CXFServlet</servlet-name>3.<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>4.<load-on-startup>1</load-on-startup>5.</servlet>6.<servlet-mapping>7.<servlet-name>CXFServlet</servlet-name>8.<url-pattern>/services/*</url-pattern>9.</servlet-mapping>然后,在项目src目录下新建包:com.test,在新建的包中创建TestService.java,代码如下:[java]view plaincopy1.package com.test;2.3.import javax.jws.WebService;4.5.@WebService6.public interface TestService{7.8.public String sayHi(String name);9.10.}接着,在创建TestServiceImpl.java,代码如下:[java]view plaincopy1.package com.test;2.3.import javax.jws.WebService;4.5.@WebService(endpointInterface="com.test.TestService")6.public class TestServiceImpl implements TestService{7.8.public String sayHi(String name){9.10.return name+",welcome to here!";11.}12.}CXF中采用注解的方式声明哪些类作为WebService进行发布,@WebService:声明webservice接口;@WebService(endpointInterface="com.test.TestService"):声明这个类是TestService接口的实现类。
其次,在WEB-INF下新建cxf-servlet.xml文件,代码如下:[html]view plaincopy1.<?xml version="1.0"encoding="UTF-8"?>2.3.<beans xmlns="/schema/beans"4.xmlns:xsi="/2001/XMLSchema-instance"5.xmlns:jaxws="/jaxws"6.xsi:schemaLocation="7./schema/beans http://www.springframe/schema/beans/spring-beans.xsd8./jaxws /schemas/jaxws.xsd">9.10.<import resource="classpath:META-INF/cxf/cxf.xml"/>11.<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>12.<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>13.14.<jaxws:server id="testService"serviceClass="com.test.TestService"address="/testService">15.<jaxws:serviceBean>16.<bean class="com.test.TestServiceImpl"/>17.</jaxws:serviceBean>18.</jaxws:server>19.</beans>id:自定义,serviceClass:接口类的完整包名,address:此接口的访问路径,<jaxws:serviceBean/>标签用于配置接口的实现类然后,在web.xml中配置启动时加载cxf-servlet.xml,并配置Spring的监听器,代码如下:[html]view plaincopy1.<context-param>2.<param-name>contextConfigLocation</param-name>3.<param-value>/WEB-INF/cxf-servlet.xml</param-value>4.</context-param>5.6.<listener>7.<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>8.</listener>web.xml文件的完整内容如下:[html]view plaincopy1.<?xml version="1.0"encoding="UTF-8"?>2.<web-app version="2.5"3.xmlns="/xml/ns/javaee"4.xmlns:xsi="/2001/XMLSchema-instance"5.xsi:schemaLocation="/xml/ns/javaee6./xml/ns/javaee/web-app_2_5.xsd">7.8.<context-param>9.<param-name>contextConfigLocation</param-name>10.<param-value>/WEB-INF/cxf-servlet.xml</param-value>11.</context-param>12.13.<listener>14.<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>15.</listener>16.17.<servlet>18.<servlet-name>CXFServlet</servlet-name>19.<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>20.<load-on-startup>1</load-on-startup>21.</servlet>22.<servlet-mapping>23.<servlet-name>CXFServlet</servlet-name>24.<url-pattern>/services/*</url-pattern>25.</servlet-mapping>26.27.</web-app>最后,发布到tomcat中并启动,在浏览器中输入http://localhost:8080/cxftest/services/testService?wsdl,发布成功!三、测试发布的WebService,生成客户端代码调用WebService在浏览器中输入http://localhost:8080/cxftest/services/testService/sayHi?arg0=andy,返回内容正常,调用成功!这里要注意一点,在浏览器中测试接口时,参数名一定要和WSDL 文档中的参数名一致,否则会出错。