SOA中的“S”

日期: 2008-09-02 作者:liang_ma 来源:TechTarget中国

  这些天一直在关注WebService,SOA的核心理念是“S”,即服务。当我们的构件完成之后,究竟如何发布为何种服务,这就设计到了SCA绑定的问题。我这里研究了一下Cxf框架,与大家一同分享,如理解有偏差,请大家指出,谢谢。

  SCA绑定用于包含在SCA域里的引用和服务之间的服务交互。绑定类型以哪种方式被实现没有在SCA规范中定义,它可以被不同的SCA运行时(runtimes)通过不用的方式实现。唯一的要求是:SCA绑定类型中必需的服务必须被实现。

  Web Service绑定的Schema如下:

  <binding.ws wsdlElement=”xs:anyURI”?

                      wsdli_wsdlLocation=”list of xs:anyURI”?

               …>

           <wsa:EndpointReference>…</wsa:EndpointReference>*

            …

       </binding.ws>

   1. Endpoint URI 解析

  解析SCA服务中的URI的规则已经制定好了,URI是如下形式:

  1). endpoint里的URIs或由wsa:EndpointReference的wsa:Address元素指定的URI

  2). 在binding.ws元素中使用“uri”属性显示指定

  3). 由组装规范(Assembly specification)定义的隐式URI。

  2. SCA服务的WSDL描述

  任何一个拥有1个或多个使用HTTP的web 服务绑定的服务必须返回一个WSDL描述,通过在HTTP endpoint后加上一个“?wsdl”的一个http get请求后缀就可以得到。

  下面是一个使用CXF框架生成WSDL描述的的helloworld例子:

  1.定义接口

   @WebService 
  public interface HelloWorld {  
      String sayHi(@WebParam(name=”text”) String text);  
  }

  2.实现接口

  @WebService(endpointInterface = “com.zx.cxf.service.HelloWorld”, serviceName = “HelloWorld”)
  public class HelloWorldImpl implements HelloWorld {

   public String sayHi(String text) {
    return “Hello ” + text;
   }
  }

  3.配置并发布服务

   <jaxws:endpoint id=”helloWorld”
    implementor=”com.zx.cxf.service.HelloWorldImpl”
    address=”/HelloWorld”>
   </jaxws:endpoint>

   4.查看WSDL描述

  <?xml version=”1.0″ encoding=”UTF-8″ ?>

  - <wsdl:definitions name=”HelloWorld”   targetNamespace=”http://service.cxf.zx.com/”               >
  - <wsdl:types>
  - <xs:schema attributeFormDefault=”unqualified”   elementFormDefault=”unqualified”   targetNamespace=”http://service.cxf.zx.com/”      >
    <xs:element name=”sayHi” type=”tns:sayHi” />
    <xs:element name=”sayHiResponse” type=”tns:sayHiResponse” />
  - <xs:complexType name=”sayHi”>
  - <xs:sequence>
    <xs:element minOccurs=”0″ name=”text” type=”xs:string” />
    </xs:sequence>
    </xs:complexType>
  - <xs:complexType name=”sayHiResponse”>
  - <xs:sequence>
    <xs:element minOccurs=”0″ name=”return” type=”xs:string” />
    </xs:sequence>
    </xs:complexType>
    </xs:schema>
    </wsdl:types>
  - <wsdl:message name=”sayHiResponse”>
    <wsdl:part element=”tns:sayHiResponse” name=”parameters” />
    </wsdl:message>
  - <wsdl:message name=”sayHi”>
    <wsdl:part element=”tns:sayHi” name=”parameters” />
    </wsdl:message>
  - <wsdl:portType name=”HelloWorld”>
  - <wsdl:operation name=”sayHi”>
    <wsdl:input message=”tns:sayHi” name=”sayHi” />
    <wsdl:output message=”tns:sayHiResponse” name=”sayHiResponse” />
    </wsdl:operation>
    </wsdl:portType>
  - <wsdl:binding name=”HelloWorldSoapBinding” type=”tns:HelloWorld”>
    <soap:binding style=”document”   transport=”http://schemas.xmlsoap.org/soap/http” />
  - <wsdl:operation name=”sayHi”>
    <soap:operation soapAction=”” style=”document” />
  - <wsdl:input name=”sayHi”>
    <soap:body use=”literal” />
    </wsdl:input>
  - <wsdl:output name=”sayHiResponse”>
    <soap:body use=”literal” />
    </wsdl:output>
    </wsdl:operation>
    </wsdl:binding>
  - <wsdl:service name=”HelloWorld”>
  - <wsdl:port binding=”tns:HelloWorldSoapBinding”   name=”HelloWorldImplPort”>
    <soap:address location=”http://localhost:8081/CxfServiceTest/HelloWorld” />
    </wsdl:port>
    </wsdl:service>
    </wsdl:definitions>

  5. 客户端访问

   public static void main(String args[]) throws Exception {
    JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
    factory.getInInterceptors().add(new LoggingInInterceptor());
    factory.getOutInterceptors().add(new LoggingOutInterceptor());
    factory.setServiceClass(HelloWorld.class);
    factory
      .setAddress(“http://localhost:8080/CxfService/HelloWorld”);
    HelloWorld client = (HelloWorld) factory.create();

    String reply = client.sayHi(“HI”);
    System.out.println(“Server said: ” + reply);
   }

  原文出处:http://gocom.primeton.com/blog12255_35328.htm

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

liang_ma
liang_ma

相关推荐

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。

  • 联合创新,携手共赢 华为与Commvault签署全球合作联盟协议

    【中国,上海,2015年9月19日】在2015年华为云计算大会上,全球领先的信息与通信解决方案供应商华为与美国知名的数据管理软件及相关服务主要供应商Commvault签署全球合作联盟协议。基于合作协议,双方将会加大投入数据中心备份解决方案在云化环境下的“可服务化”技术研究 。Commvault公司全球业务发展副总裁Andreas May、华为IT数据中心解决方案总裁马力出席签约仪式。