正 文

使用JAX-WS发布RESTful Web Service


www.7dspace.com  更新日期:2006-2-7 23:18:32  七度空间


JAX-WS的EA3版本或以JWSDP 2.0发布的JAX-WS都支持发布和使用RESTful Web Services。下面的示例将说明如何用JAX-WS发布一个RESTful Web Service。

用JAX-WS发布 RESTful Web Service,首先要创建一个对javax.xml.ws.Provider<T>接口的实现。Provider接口是对标准终端实现类的另一种动态实现办法。它与javax.xml.ws类似。Dispatch接口用在客户端。你会注意到Provider<T>是一个生成类。它能用SOAP/HTTP绑定支持Provider<javax.xml.transform.Source>和Provider< javax.xml.soap.SOAPMessage>,或者用XML/HTTP绑定支持Provider< javax.activation.DataSource>和Provider< javax.xml.transform.Source>。当创建Provider的实现时,你可以选择处理哪种形式的请求与响应消息。

我们要创建的示例Web服务非常简单,它把两个数相加然后返回结果,而我们将在Provider实现中使用Provider<Source> 以及XML/HTTP绑定。首先,我们写一个AddNumbers Provider的实现来声明AddNumbers类。

public class AddNumbersImpl implements Provider
{}

接下来,声明@Resource标记,它被用来在JAX-WS 运行时注射WebServiceContext到我们的AddNumbersImpl 实例中。

public class AddNumbersImpl implements Provider {
    @Resource
    protected WebServiceContext wsContext;
}

下一步是实现T Provider.invoke(T request)方法。我们首先写出下面的方法声明,它是一个简单的try-catch块用来处理异常。注意,该方法以一个Source对象为请求,并返回一个Source对象作为响应。这符合我们创建的Provider类型。

public class AddNumbersImpl implements Provider {
    @Resource
    protected WebServiceContext wsContext;

    public Source invoke(Source request) {
        try {

        } catch(Exception e) {
            e.printStackTrace();
            throw new HTTPException(500);
        }
    }
}

在本例中,AddNumbers Web服务将通过从URL路径或HTTP请求中抽取要相加的数字来获得请求。请求字符串和路径字符串可以从MessageContext中获取,而它又从 WebServiceContext wsContext中获得,它会被注射到我们的AddNumbers对象中。下面的代码背用来从URL中获取PATH_INFO并检查看它是否是合适的格式。

String path = (String)mc.get(MessageContext.PATH_INFO);
if (path != null && path.contains("/num1") &&
    path.contains("/num2")) {
return createResultSource(path);
}

createResultSource(String str)方法只从合适的被格式化的MessageContext.PATH_INFO字符串中创建Source对象。它从路径中抽取要相加的数字,然后把它们相加并调用createResultSource(int sum)方法。下面是这两个方法的源代码:

    private Source createResultSource(String str) {
        StringTokenizer st = new StringTokenizer(str, "=&/");
        String token = st.nextToken();
        int number1 = Integer.parseInt(st.nextToken());
        st.nextToken();
        int number2 = Integer.parseInt(st.nextToken());
        int sum = number1+number2;
        return createResultSource(sum);
    }

    private Source createResultSource(int sum) {
        String body =
            "<ns:addNumbersResponse xmlns:ns=\"http://duke.org\"><ns:return>"
            +sum
            +"</ns:return></ns:addNumbersResponse>";
        Source source = new StreamSource(
            new ByteArrayInputStream(body.getBytes()));
        return source;
    }

4页,页码:[1] [2] [3] [4] 

上一篇:反向访问列表在实际中的应用
下一篇:2006年微软停止免费技术支持的产品列表
标题:使用JAX-WS发布RESTful Web Service 作者:Joseph Ottinger 来源:Techtarget
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐