CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > Web服务子站 > 技巧

使用JAX-WS发布RESTful Web Service

作者: Joseph Ottinger,  出处:TechTarget, 责任编辑: 叶江, 
2006-02-06 14:08
  JAX-WS的EA3版本或以JWSDP 2.0发布的JAX-WS都支持发布和使用RESTful Web Services。下面的示例将说明如何用JAX-WS发布一个RESTful Web Service。

      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 :
  • 本文关键词:

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅

       
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错