1. 程式人生 > >Spring整合webservice服務

Spring整合webservice服務

1.匯入座標,服務端(rs)

<!-- 使用CXF RS開發 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>3.0.1</version>
        </dependency>

<!-- 在CXF擴充套件提供者,提供轉換json介面  -->
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-rs-extension-providers</artifactId> <version>3.0.1</version> </dependency> <!-- cxf 擴充套件提供者 轉換json 預設需求一個工具包 -->
<dependency> <groupId>org.codehaus.jettison</groupId> <artifactId>jettison</artifactId> <version>1.3.7</version> </dependency>

2.web.xml配置

<servlet>
        <servlet-name>CXFService</servlet-name
>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFService</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>

3.介面的配置
3.1 path無引數

@POST
    @Path("/user")
    @Consumes({ "application/xml", "application/json" })
    public void saveUser(User user);

    @PUT
    @Path("/user")
    @Consumes({ "application/xml", "application/json" })
    public void updateUser(User user);

@GET
    @Path("/user")
    @Produces({ "application/xml", "application/json" })
    public List<User> findAllUsers();

3.2 path有引數(兩種傳參方法)

@POST
    @Path("/user/{id}")
    public void saveUser(@PathParam("id") String id);
呼叫服務方法:http://localhost:XXXX/專案名/webxml配置(service)/ApplicationContext檔案中address的路徑(Service1)/介面上的path路徑/引數

    @PUT
    @Path("/user")
    public void saveUser(@QueryParam("id") String id);

@GET
    @Path("/user")
    @Produces({ "application/xml", "application/json" })
    public List<User> findAllUsers();

4.ApplicationContext.xml檔案配置

<jaxrs:server id="abcCustomerService" address="/Service1"><!-- web.xml後配置的路徑 -->
        <jaxrs:serviceBeans>
        <!-- webservice 介面方法實現類  -->
            <bean class="cn.itcast.bos.service.take_delivery.impl.PromotionServiceImpl"></bean>
        </jaxrs:serviceBeans>
        <jaxrs:inInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
        </jaxrs:inInterceptors>
        <jaxrs:outInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
        </jaxrs:outInterceptors>
    </jaxrs:server>     

5.介面上方法引數意義

@PathParam@QueryParam處理簡單引數型別,如StringInteger8種原始型別+8種包裝型別+String
@Consumes處理自定義物件型別,如UserCar

6.呼叫服務(匯入座標和呼叫格式)

    <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-client</artifactId>
            <version>${cxf.version}</version>
        </dependency>

呼叫服務方法:
WebClient.create(http://localhost:XXXX/專案名/webxml配置(service)/ApplicationContext檔案中address的路徑(Service1)/介面上的path路徑/引數
)
注意事項:
1.如果是要通過webservice服務傳輸的pojo類,需要加上註解
@XmlRootElement
2.如果自己封裝的實體類裡面有泛型,需要加上註解
@XmlSeeAlso({泛型的實現類位元組碼檔案})