在这篇文章,我向java程序开发者介绍service-oriented architecture (soa),我将解释怎么使用j2ee 1.4去建立一个web 服务使其能操作和方便的通过j2ee1.4来适应应用服务(例如: oracle application server)。
web services architecture
让我们在学习web services部署j2ee platform之前,我们先了解web service 的主要结构。
通过网络我们可以找到一些关于 web services的定义、发布、和调用。一个web service,如图一
图一
现在有两种web services:“rpc style and document style”,rpc-style web services是在最初受欢迎的。但在近几年是document-style是首选的web services。
rpc-style web services是远程程序调用,代表相互交互。rpc-style web services在交互信息中调用和返回必须先符合明确的签名,在应用中非常不方便。相反,document-style web services 通过用xml,来改变发送和接收应用。
许多的开发者觉得web services是一个有活力的技术,他继承soa。因为它提供一个相互作用在不同的平台和轻便的技术。例如xml,soap,and http。
what are web services made of?
在web service首先要先定义a web services definition language (wsdl; pronounced “wizdle”) 文档。
这个wsdl提供一个完全的描述web service,包括端口、操作、信息类型等。
here is a simple example of a wsdl document that describes a helloworld web service:
<definitions
name=”helloservice”
targetnamespace=”http://oracle.j2ee.ws/ejb/hello“
xmlns=”http://schemas.xmlsoap.org/wsdl/”
xmlns:tns=”http://oracle.j2ee.ws/ejb/hello”
xmlns:mime=”http://schemas.xmlsoap.org/wsdl/mime/”
xmlns:soap12=”http://schemas.xmlsoap.org/wsdl/soap12/”
xmlns:ns1=”http://oracle.j2ee.ws/ejb/hello/types”
xmlns:xsd=”http://www.w3.org/2001/xmlschema”
xmlns:soap=”http://schemas.xmlsoap.org/wsdl/soap/“>
<types>
<schema elementformdefault=”qualified”
targetnamespace=”http://oracle.j2ee.ws/ejb/hello/types”
xmlns=”http://www.w3.org/2001/xmlschema”
xmlns:soap11-enc=”http://schemas.xmlsoap.org/soap/encoding/“
xmlns:tns=”http://oracle.j2ee.ws/ejb/hello/types”
xmlns:wsdl=”http://schemas.xmlsoap.org/wsdl/”
xmlns:xsi=”http://www.w3.org/2001/xmlschema-instance“>
<complextype name=”sayhello”>
<message name=”helloserviceinf_sayhello”>
<part name=”parameters”
element=”ns1:sayhelloelement”/>
</message>
<message name=”helloserviceinf_sayhelloresponse”>
<part name=”parameters”
element=”ns1:sayhelloresponseelement”/>
</message>
<porttype name=”helloserviceinf”>
<operation name=”sayhello”>
<input message=”tns:helloserviceinf_sayhello”/>
<output message=”tns:helloserviceinf_sayhelloresponse”/>
</operation>
</porttype>
<sequence>
<element name=”string_1″ nillable=”true” type=”string”/>
</sequence>
</complextype>
<complextype name=”sayhelloresponse”>
<sequence>
<element name=”result” nillable=”true” type=”string”/>
</sequence>
</complextype>
<element name=”sayhelloelement” type=”tns:sayhello”/>
<element name=”sayhelloresponseelement”
type=”tns:sayhelloresponse”/>
</schema>
</types>
<binding name=”httpsoap11binding” type=”tns:helloserviceinf”>
<soap:binding style=”document”
transport=”http://schemas.xmlsoap.org/soap/http”/>
<operation name=”sayhello”>
<soap:operation
soapaction=”http://oracle.j2ee.ws/ejb/hello:sayhello”/>
<input>
<soap:body use=”literal” parts=”parameters”/>
</input>
<output>
<soap:body use=”literal” parts=”parameters”/>
</output>
</operation>
</binding>
<service name=”helloservice”>
<port name=”httpsoap11″ binding=”tns:httpsoap11binding”>
<soap:address location=”replace_with_actual_url”/>
</port>
</service>
</definitions>
在这个wsdl,你需要注意helloservice ,包括他的包括端口、操作、信息类型等。这个wsdl 使web service 和客户端,能够自动的产生客户端代理。
在这个web services有两个主要的技术,一个是soap,它是调用web service,一个是uddi它提供web service的本地注册。
未完待续