cxf spring Rest 风格的在jetty下的heolloworld例子

来源:互联网 发布:盖亚网络 编辑:程序博客网 时间:2024/06/16 06:01

cxf 3.0.4

spring 3.2.6(cxf自带包)

服务器用的jetty

写代码的顺序忘了,因为中间出了一个小问题折腾了很久。

项目名称:cxf

代码1:接口(可以不要,我只是随意写的)

package com.demo;import java.util.List;import javax.jws.WebParam;import javax.jws.WebService;import javax.ws.rs.Consumes;import javax.ws.rs.GET;import javax.ws.rs.Path;import javax.ws.rs.PathParam;import javax.ws.rs.Produces;import javax.ws.rs.core.MediaType;@Path("/helloworld")public interface HelloWorld {//@Produces返回@GET   @Consumes(MediaType.APPLICATION_JSON)    @Path("/say/{id}/{name}")  public void sayName(@PathParam("id")String id,@PathParam("name")String name);@GET@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })@Path("/ssa/{id}")  public String ssa(@PathParam("id")String id); }
代码2:实现接口:

package com.demo;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import javax.jws.WebService;public class HelloWorldImpl implements HelloWorld {                      @Override          public void sayName(String id,String name) {                   System.out.println("id" + id + "name:"+name);          }                      @Override           public String ssa(String id){       System.out.println("nihao" + id);       return "hello";       }}
因为用的jetty服务器(tomcat会不同),WebContent文件是自己建的,然后在build configuration中设置进去。WebContent可以直接从别的地方拷过来。然后里面的web.xml才是重点。

代码3:web.xml代码:

<?xml version="1.0" encoding="UTF-8"?>       <web-app>               <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> <!--配置CXFServlet-->              <servlet>                     <servlet-name>CXFServlet</servlet-name>                     <display-name>CXFServlet</display-name>                     <servlet-class>                            org.apache.cxf.transport.servlet.CXFServlet                     </servlet-class>                     <load-on-startup>1</load-on-startup>               </servlet>               <servlet-mapping>                      <servlet-name>CXFServlet</servlet-name>                      <!-- url可自定义配置,用于CXFServlet请求地址拦截/webservice -->                       <url-pattern>/*</url-pattern>               </servlet-mapping>         </web-app>
比较简单的配置<url-pattern>/*</url-pattern>此处很重要,跟之后的路径有关系。具体我在下面举例说。

代码4:applicationcontext.xml

<beans xmlns="http://www.springframework.org/schema/beans"xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jaxrs="http://cxf.apache.org/jaxrs"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/util       http://www.springframework.org/schema/util/spring-util-3.0.xsd      http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-3.0.xsd     http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx-3.0.xsdhttp://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.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"/>          <!--address:   要和注释里面声明的服务名对应,对应的是外部访问地址 -->         <jaxrs:server               id="helloWorld"              address="/xiaoxiao" >                    <jaxrs:serviceBeans><bean class="com.demo.HelloWorldImpl"/></jaxrs:serviceBeans><jaxrs:extensionMappings><entry key="json" value="application/json" /><entry key="xml" value="application/xml" /></jaxrs:extensionMappings><jaxrs:providers><ref bean="jsonProvider" /></jaxrs:providers><jaxrs:languageMappings><entry key="en" value="en-gb" /></jaxrs:languageMappings></jaxrs:server>  <bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider"><property name="dropRootElement" value="true" /><property name="dropCollectionWrapperElement" value="true" /><property name="serializeAsArray" value="true" /></bean>     </beans>
代码已经完成。项目右击选择run as——》run jetty发布。

5:浏览器访问http://localhost:8080/cxf/xiaoxiao/helloworld/ssa/1?_type=json

浏览器会返回hello字样。

eclipse日志会输出nihao1字样。

这样就ok了。下篇我会总结一下我在过程中的路径问题与分析。

0 0
原创粉丝点击