面向成功,实现梦想!

一起分享,一起成长,共创辉煌!
构客网首页  博客  论坛

 
  SOA我有话说
  本文的标签
SOA (收录4671篇)SCA (收录6260篇)SOA我有话说 (收录204篇)SOA中国的关键任务 (收录39篇)
  用户信息
 
帐号:  新手必读
密码: 保存密码
 
  分类列表
全部类别(24 篇)
我的文章(24 篇)
  按月归档
2008年-04月(24 篇)
  SOA2007 - SOA实践
我们何时迈向SOA
——SOA在中国的整体发展现状究竟如何?
我们如何迈向SOA
——中国企业如何迈出实施SOA的第一步?
我们应采用何种技术
——SOA国际标准SCA/SDO的具体内涵?
我们还需要何种技能
——SOA将如何改变系统架构设计以及项目管理过程?

SOA中的“S”

发布时间:2008年09月02日 作者:liang_ma

阅读次数:2966次 类别:我的文章 永久链接 Trackback 1条评论
参加SOA我有话说
       这些天一直在关注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个或多个使用HTTPweb 服务绑定的服务必须返回一个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/" xmlns:ns1="http://cxf.apache.org/bindings/xformat" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://service.cxf.zx.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <wsdl:types>
- <xs:schema attributeFormDefault="unqualified" elementFormDefault="unqualified" targetNamespace="http://service.cxf.zx.com/" xmlns:tns="http://service.cxf.zx.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <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);
 }

 

 

 

 

 

 

 


本文参加了“SOA中国的关键任务”博客大赢家,评论文章即可参与活动,赢取万元奖金!

 评论 查看全部评论
 
love_soa 于 2008-09-10
SOA中构件发布的服务也是以这种形式发布的吗???