- 浏览: 553298 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (270)
- Ask chenwq (10)
- JSF (2)
- ExtJS (5)
- Life (19)
- jQuery (5)
- ASP (7)
- JavaScript (5)
- SQL Server (1)
- MySQL (4)
- En (1)
- development tools (14)
- Data mining related (35)
- Hadoop (33)
- Oracle (13)
- To Do (2)
- SSO (2)
- work/study diary (10)
- SOA (6)
- Ubuntu (7)
- J2SE (18)
- NetWorks (1)
- Struts2 (2)
- algorithm (9)
- funny (1)
- BMP (1)
- Paper Reading (2)
- MapReduce (23)
- Weka (3)
- web design (1)
- Data visualisation&R (1)
- Mahout (7)
- Social Recommendation (1)
- statistical methods (1)
- Git&GitHub (1)
- Python (1)
- Linux (1)
最新评论
-
brandNewUser:
楼主你好,问个问题,为什么我写的如下的:JobConf pha ...
Hadoop ChainMap -
Molisa:
Molisa 写道mapred.min.split.size指 ...
Hadoop MapReduce Job性能调优——修改Map和Reduce个数 -
Molisa:
mapred.min.split.size指的是block数, ...
Hadoop MapReduce Job性能调优——修改Map和Reduce个数 -
heyongcs:
请问导入之后,那些错误怎么解决?
Eclipse导入Mahout -
a420144030:
看了你的文章深受启发,想请教你几个问题我的数据都放到hbase ...
Mahout clustering Canopy+K-means 源码分析
Create a Web Service with Apache CXF and Jboss6 on MyEclipse
- 博客分类:
- SOA
参考:http://www.celinio.net/techblog/?p=531
I have recently started studying Apache CXF, the open source web service
framework. I am familiar with developing Web Services using EJB 3, Axis or Glue.
But not with CXF. Until now.
CXF is a mix of two projects : Celtix and XFire,
which explains the name CXF.
It provides support for the JAX-WS, JAX-RS and
JAX-RPC specifications.
Developing Web Services using CXF and JBoss is quite
easy. The only annoying part is to figure out which JARs libraries
to include
in the classpath and which JARs libraries to exclude.
So i am developing a simple web service that calculates
the BMI (Body Mass Index). The formula is :
BMI = weight / (height x
height)
1、 First create a Web Project in MyEclipse 8.6.
2、Download the CXF framework apache-cxf-2.3.1.zip at http://cxf.apache.org/download.html
3、After unzipping the archive, I added to WEB-INF/lib all the libraries that are inside the apache-cxf-2.3.1\lib
folder. It is of course
not a good habit to have since adding all sorts of libraries can produces
conflicts.
I had to remove a few jars such as :
jaxb-xjc-2.2.1.1.jar,
xalan-2.7.1.jar and serializer-2.7.1.jar
There are probably a few extras jars that are not needed but at least they do not produce any error for that simple web service.
4、Create the Service Endpoint Interface (SEI). Here I use the bottom-up approach (code first) : that is first create a Java class that will be converted into a web service. The other approach is Top-Down (contract first, based on an existing WSDL file).
package com.company.bmi.services; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface IBMICalculator { public double computeBMI(@WebParam(name="weight") double weight, @WebParam(name="height") double height) ; }
5、Create the class that implements this interface. It will implement the operations defined by the service :
package com.company.bmi.services; public class IBMICalculatorImpl implements IBMICalculator{ @Override public double computeBMI(double weight, double height) { return weight / (height * height); }
6、Add the Spring-based configuration file, cxf.xml, under the package directory, for instance :
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:endpoint id="calcBMI" implementor="com.company.bmi.services.IBMICalculatorImpl" address="/cxfBmi"/> </beans>
7、You need to update the deployment descriptor file WEB-INF/web.xml :
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>BMI</display-name> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:com/company/bmi/services/cxf.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <servlet> <servlet-name>CXFServlet</servlet-name> <servlet-class> org.apache.cxf.transport.servlet.CXFServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>
I specify the path where to find the cxf.xml file and also the CXFServlet.
7、Finally create a client that uses this web service. This is a standalone Java class that invokes the IBMICalculator web service :
package com.company.bmi.client; import org.apache.cxf.interceptor.LoggingInInterceptor; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.company.bmi.services.IBMICalculator; public final class Client { private Client() { } public static void main(String args[]) throws Exception { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.setServiceClass(IBMICalculator.class); factory.setAddress("http://localhost:8085/BMI/services/cxfBmi"); IBMICalculator client = (IBMICalculator) factory.create(); Double bmi = client.computeBMI(75, 170); System.out.println("BMI : " + bmi); } }
9、run BMI on Jboss As 6
The available SOAP services are listed at the following URL :
http://localhost:8085/BMI/services/
10、WSDL :
http://localhost:8085/soa_apache_cxf_bmi/services/cxfBmi?wsdl
<wsdl:definitions name="IBMICalculatorImplService" targetNamespace="http://services.bmi.company.com/"> <wsdl:types> <xs:schema elementFormDefault="unqualified" targetNamespace="http://services.bmi.company.com/" version="1.0"> <xs:element name="computeBMI" type="tns:computeBMI"/> <xs:element name="computeBMIResponse" type="tns:computeBMIResponse"/> <xs:complexType name="computeBMI"> <xs:sequence> <xs:element name="weight" type="xs:double"/> <xs:element name="height" type="xs:double"/> </xs:sequence> </xs:complexType> <xs:complexType name="computeBMIResponse"> <xs:sequence> <xs:element name="return" type="xs:double"/> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <wsdl:message name="computeBMIResponse"> <wsdl:part element="tns:computeBMIResponse" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:message name="computeBMI"> <wsdl:part element="tns:computeBMI" name="parameters"> </wsdl:part> </wsdl:message> <wsdl:portType name="IBMICalculator"> <wsdl:operation name="computeBMI"> <wsdl:input message="tns:computeBMI" name="computeBMI"> </wsdl:input> <wsdl:output message="tns:computeBMIResponse" name="computeBMIResponse"> </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:binding name="IBMICalculatorImplServiceSoapBinding" type="tns:IBMICalculator"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="computeBMI"> <soap:operation soapAction="" style="document"/> <wsdl:input name="computeBMI"> <soap:body use="literal"/> </wsdl:input> <wsdl:output name="computeBMIResponse"> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="IBMICalculatorImplService"> <wsdl:port binding="tns:IBMICalculatorImplServiceSoapBinding" name="IBMICalculatorImplPort"> <soap:address location="http://localhost:8085/BMI/services/cxfBmi"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
There is one operation : computeBMI. The input is computeBMI and the output is computeBMIResponse
11、The response, displayed when running the client (java code) :
---------------------------
ID: 1
Address: http://localhost:8085/BMI/services/cxfBmi
Encoding: UTF-8
Content-Type: text/xml
Headers: {SOAPAction=[""], Accept=[*/*]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:computeBMI xmlns:ns1="http://services.bmi.company.com/"><weight>75.0</weight><height>170.0</height></ns1:computeBMI></soap:Body></soap:Envelope>
--------------------------------------
30 janv. 2011 17:56:14 org.apache.cxf.interceptor.AbstractLoggingInterceptor log
INFO: Inbound Message
----------------------------
ID: 1
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {content-type=[text language="/xml;charset=UTF-8"][/text][/text], Date=[Sun, 30 Jan 2011 16:56:14 GMT], Content-Length=[241], X-Powered-By=[Servlet/3.0; JBossAS-6], Server=[Apache-Coyote/1.1]}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:computeBMIResponse xmlns:ns2="http://services.bmi.company.com/"><return>0.0025951557093425604</return></ns2:computeBMIResponse></soap:Body></soap:Envelope>
--------------------------------------
BMI : 0.0025951557093425604
评论
First create a new SoapUi project (Ctrl+n), give
the project a name and add the WSDL file or URL :
Then you need to call the service that you want to test. Double-click the created request “Request 1″ below the computeBMI method. The request editor pops up :
What you need to do next is add values to the parameters of the method. For instance :
<weight>75</weight><height>170</height>
Then submit the request (green arrow on the top left corner) and validate the response :
<return>0.0025951557093425604</return>
发表评论
-
基于SCA的SOA架构研究与应用
2011-06-13 10:37 861信息孤岛和遗留系统是现代IT业界面临的问题。解决这两个现象是企 ... -
Tuscnay SCA源码分析报告
2011-05-27 09:31 948参考:http://wendang.baidu.com/vie ... -
Tuscany SCA Core实现的SPI机制
2011-05-27 09:27 876参考:http://kevinkevin1979. ... -
SCA集成Spring,implementation.spring无法识别问题
2011-05-05 16:11 1信息: Creating node: null 16: ... -
本科生毕业设计(论文)中期检查表
2011-04-22 10:42 522010届本科生毕业设计(论文)中期检查表 ... -
Deploying Apache CXF webservice on Jboss5.1.0 throws exception.
2011-04-16 18:41 768javax.servlet.servletException ... -
基于SCA的SOA架构研究与实现 —— 开题报告
2011-04-12 14:02 2151一.研究背景、概况及 ...
相关推荐
Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且...
Developing Web Services with Apache CXF and Axis2, 3rd Edition
Developing Web Services with Apache CXF and Axis2_3rd Edition
Apache CXF Web Service Development
Apache CXF Web Service Development 源码
Restful Web Service开发可供参考
实战Web Service with CXF.ppt 博文链接:https://frankiehuang.iteye.com/blog/155333
Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且...
详细的从入门到精通, 手把手的教你做WEB SERVICE 该资源借花献佛,是一个高手写的,我在这里借花献佛,推广推广,让大家多一个学习的机会,吃水不忘挖井人,轻大家也谢谢写该文档的高手
Apache CXF 框架是一个比较有前途的开源 Web Services 框架,也是构建 SOA 架构应用的利器。本书采用案例源码和解说形式全面介绍 Apache CXF 框架的功能。 本书共 15 章,大致分为三个部分。第一部分介绍关于 SOA 和...
三本英文版的有关axis2的书,都自带标签,很清晰,三本书是:Developing WebServices with Apach CXF and Axis2 Developing WebServices with Apache Axis2 Quickstart Apache Axis2-A pratical guide to creating ...
Apache CXF Web Service Development.pdf
Web Services Using Apache CXF Enabling Web Services through Java
Apache CXF Web Service Development Developing+Web+Services+with+Apache+CXF+and+Axis2+(3rd+Edition)
Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF Apache CXF