基于JAX-WS实现RESTful形式的web服务端点(endpoint)

为了使用依赖的库,可以在maven工程的pom.xml文件中增加如下依赖:

<dependency>
  <groupId>jakarta.xml.ws</groupId>
  <artifactId>jakarta.xml.ws-api</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.ws</groupId>
  <artifactId>jaxws-rt</artifactId>
  <version>4.0.0</version>        
</dependency>

RESTful形式的web服务使用XML/HTTP绑定,实现jakarta.xml.ws.Provider。
服务端的实现类用jakarta.xml.ws.WebServiceProvider和BindingType(value=HTTPBinding.HTTP_BINDING)注释。其中HTTPBinding.HTTP_BINDING表示使用XML/HTTP绑定。

例如:

@WebServiceProvider
@BindingType(value=HTTPBinding.HTTP_BINDING)
public class Register implements Provider<Source>

服务端的实现类示例:

package com.thb.server;

import jakarta.annotation.Resource;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import jakarta.xml.ws.BindingType;
import jakarta.xml.ws.Provider;
import jakarta.xml.ws.WebServiceContext;
import jakarta.xml.ws.WebServiceProvider;
import jakarta.xml.ws.handler.MessageContext;
import jakarta.xml.ws.http.HTTPBinding;
import jakarta.xml.ws.http.HTTPException;
import java.io.ByteArrayInputStream;

@WebServiceProvider
@BindingType(value=HTTPBinding.HTTP_BINDING)
public class Register implements Provider<Source> {

    @Resource(type=Object.class)
    protected WebServiceContext wsContext;

    public Source invoke(Source source) {
        try {
            MessageContext mc = wsContext.getMessageContext();
            String query = (String)mc.get(MessageContext.QUERY_STRING);
            String path = (String)mc.get(MessageContext.PATH_INFO);
            System.out.println("Query String = "+query);
            System.out.println("PathInfo = "+path);
            return createSource(query);
        } catch(Exception e) {
            e.printStackTrace();
            throw new HTTPException(500);
        }
    }
    
    private Source createSource(String str) {
        String result = "1";
        String body =
            "<response><flag>"
            +result
            +"</flag></response>";
        Source source = new StreamSource(
            new ByteArrayInputStream(body.getBytes()));
        return source;
    }
    
}

web.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="6.0" xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd">
    <description>restful</description>
    <display-name>restful</display-name>
    <listener>
        <listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
    </listener>
    <servlet>
        <description>JAX-WS endpoint - restful</description>
        <display-name>restful</display-name>
        <servlet-name>restful</servlet-name>
        <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>restful</servlet-name>
        <url-pattern>/register/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
</web-app>

sun-jaxws.xml文件的内容:

<?xml version="1.0" encoding="UTF-8"?>

<endpoints
    xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
    version="2.0">

    <endpoint
        name="power-restful-register"
        implementation="com.thb.server.Register"
        url-pattern="/register/*" />
</endpoints>

部署到tomcat的web应用文件布局:

D:\APACHE-TOMCAT-10.1.13\WEBAPPS\POWER-RESTFUL
├─META-INF
│      MANIFEST.MF
│      war-tracker
│      
└─WEB-INF
    │  sun-jaxws.xml
    │  web.xml
    │  
    ├─classes
    │  └─com
    │      └─thb
    │          └─server
    │                  Register.class
    │                  
    └─lib
            angus-activation-1.0.0.jar
            angus-mail-1.0.0.jar
            FastInfoset-2.1.0.jar
            gmbal-api-only-4.0.3.jar
            ha-api-3.1.13.jar
            jakarta.activation-api-2.1.0.jar
            jakarta.annotation-api-2.1.1.jar
            jakarta.mail-api-2.1.0.jar
            jakarta.xml.bind-api-4.0.0.jar
            jakarta.xml.soap-api-3.0.0.jar
            jakarta.xml.ws-api-4.0.0.jar
            jaxb-core-4.0.0.jar
            jaxb-impl-4.0.0.jar
            jaxws-rt-4.0.0.jar
            log4j-api-2.20.0.jar
            log4j-core-2.20.0.jar
            management-api-3.2.3.jar
            mimepull-1.10.0.jar
            saaj-impl-3.0.0.jar
            stax-ex-2.1.0.jar
            stax2-api-4.2.1.jar
            streambuffer-2.1.0.jar
            woodstox-core-6.2.8.jar

在浏览器中访问:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值