WSDL
创建对象
,
然后传递过程
/**
*Mar
13,
2007
*
Zhou
JianGuo
*
小白
*
中国电信上海技术研究院
*
MSN:zhuojianguo_leo@hotmail.com
*/
1.用Eclipse WTP工具 新建一个wsdl文件,比如Register.wsdl
2.开始在这个文件上做Design设计

3.新建一个Add Service,然后再依次添加Add Binding,Add PortType

4.对新建立的Binding,选择Generate Binging content ,选择soap document literal

5.对新建立的PortType 添加Operation ,注意下面的
<wsdl:portType name="MyRegister">
<wsdl:operation name="UserRegister">
<wsdl:input message="tns:UserInfoRequest"></wsdl:input>
<wsdl:output message="tns:UserInfoResponse"></wsdl:output>
</wsdl:operation>
</wsdl:portType>
operation name="UserRegister" 必须和message="tns:UserInfoRequest" 不一样,不能是
operation name="UserRegister"
message="tns:UserRegisterRequest" 这样的,这个是自动生成的好像
6.进入UserInfo信息,可以看到

7.进入UserInfoResponse信息,可以看到

8.他们的属性是

9再新建一个名字跟Service一样的名字的叫MyRegister
引用上面2个对象,ref=….

属性是

10.然后右击这个 wsdl文件,选择web service里的Generate java bean skeleton 就可以看到新产生的对象,然后调用*
_BindingImpl.java这个文件执行业务逻辑处理

业务逻辑处理

11.最后一步就是发布了,往server-config.wsdd添加一段类是下面的,对象传递必须序列化
<
service
name
=
"MyRegister"
provider
=
"java:RPC"
style
=
"document"
use
=
"literal"
>
<
parameter
name
=
"wsdlTargetNamespace"
value
=
"http://www.MyRegister.org/soapas"
/>
<
parameter
name
=
"wsdlServiceElement"
value
=
"MyRegister"
/>
<
parameter
name
=
"schemaQualified"
value
=
"http://www.MyRegister.org/soapas"
/>
<
parameter
name
=
"wsdlServicePort"
value
=
"MyRegister"
/>
<
parameter
name
=
"className"
value
=
"org.Register.www.MyRegister.MyRegister_BindingSkeleton"
/>
<
parameter
name
=
"wsdlPortType"
value
=
"MyRegister"
/>
<
parameter
name
=
"typeMappingVersion"
value
=
"1.2"
/>
<
parameter
name
=
"allowedMethods"
value
=
"*"
/>
<
typeMapping
xmlns:ns
=
"http://www.MyRegister.org/soapas"
qname
=
"ns:UserInfoResponse"
type
=
"java:org.Register.www.MyRegister.UserInfoResponse"
serializer
=
"org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer
=
"org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle
=
""
/>
<
typeMapping
xmlns:ns
=
"http://www.MyRegister.org/soapas"
qname
=
"ns:UserInfo"
type
=
"java:org.Register.www.MyRegister.UserInfo"
serializer
=
"org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer
=
"org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle
=
""
/>
</
service
>
-------------------------------------------------------------------
<
service
name
=
"VimicroAS"
provider
=
"java:RPC"
style
=
"document"
use
=
"literal"
>
<
parameter
name
=
"wsdlTargetNamespace"
value
=
"http://www.vipcam.cn/soapas"
/>
<
parameter
name
=
"wsdlServiceElement"
value
=
"VimicroAS"
/>
<
parameter
name
=
"schemaQualified"
value
=
"http://www.vipcam.cn/soapas"
/>
<
parameter
name
=
"wsdlServicePort"
value
=
"VimicroAS"
/>
<
parameter
name
=
"className"
value
=
"cn.vipcam.www.soapas.VimicroAS_BindingSkeleton"
/>
<
parameter
name
=
"wsdlPortType"
value
=
"VimicroAS"
/>
<
parameter
name
=
"typeMappingVersion"
value
=
"1.2"
/>
<
parameter
name
=
"allowedMethods"
value
=
"*"
/>
<
typeMapping
xmlns:ns
=
"http://www.vipcam.cn/soapas"
qname
=
"ns:>ASRegisterResponse"
type
=
"java:cn.vipcam.www.soapas.ASRegisterResponse"
serializer
=
"org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer
=
"org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle
=
""
/>
<
typeMapping
xmlns:ns
=
"http://www.vipcam.cn/soapas"
qname
=
"ns:ASRegister1"
type
=
"java:cn.vipcam.www.soapas.ASRegister"
serializer
=
"org.apache.axis.encoding.ser.BeanSerializerFactory"
deserializer
=
"org.apache.axis.encoding.ser.BeanDeserializerFactory"
encodingStyle
=
""
/>
</
service
>
12.
下面是一个整个
wsdl
文件
,
大家可以拷贝下来修改
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<
wsdl:definitions
name
=
"MyRegister"
targetNamespace
=
"http://www.Register.org/MyRegister/"
xmlns:wsdl
=
"http://schemas.xmlsoap.org/wsdl/"
xmlns:tns
=
"http://www.Register.org/MyRegister/"
xmlns:xsd
=
"http://www.w3.org/2001/XMLSchema"
xmlns:soap
=
"http://schemas.xmlsoap.org/wsdl/soap/"
>
<
wsdl:types
>
<
xsd:schema
xmlns:xsd
=
"http://www.w3.org/2001/XMLSchema"
targetNamespace
=
"http://www.Register.org/MyRegister/"
>
<
xsd:element
name
=
"MyRegister"
>
<
xsd:annotation
>
<
xsd:documentation
>
this is a root element
</
xsd:documentation
>
</
xsd:annotation
>
<
xsd:complexType
>
<
xsd:sequence
>
<
xsd:element
ref
=
"tns:UserInfoResponse"
></
xsd:element
>
<
xsd:element
ref
=
"tns:UserInfo"
></
xsd:element
>
</
xsd:sequence
>
</
xsd:complexType
>
</
xsd:element
>
<
xsd:element
name
=
"UserInfo"
>
<
xsd:complexType
>
<
xsd:sequence
>
<
xsd:element
name
=
"in"
type
=
"xsd:string"
></
xsd:element
>
</
xsd:sequence
>
</
xsd:complexType
>
</
xsd:element
>
<
xsd:element
name
=
"UserInfoResponse"
>
<
xsd:complexType
>
<
xsd:sequence
>
<
xsd:element
name
=
"out"
type
=
"xsd:string"
></
xsd:element
>
</
xsd:sequence
>
</
xsd:complexType
>
</
xsd:element
>
</
xsd:schema
>
</
wsdl:types
>
<
wsdl:message
name
=
"UserInfoRequest"
>
<
wsdl:part
name
=
"parameters"
element
=
"tns:UserInfo"
></
wsdl:part
>
</
wsdl:message
>
<
wsdl:message
name
=
"UserInfoResponse"
>
<
wsdl:part
name
=
"parameters"
element
=
"tns:UserInfoResponse"
></
wsdl:part
>
</
wsdl:message
>
<
wsdl:portType
name
=
"MyRegister"
>
<
wsdl:operation
name
=
"UserRegister"
>
<
wsdl:input
message
=
"tns:UserInfoRequest"
></
wsdl:input
>
<
wsdl:output
message
=
"tns:UserInfoResponse"
></
wsdl:output
>
</
wsdl:operation
>
</
wsdl:portType
>
<
wsdl:binding
name
=
"MyRegister"
type
=
"tns:MyRegister"
>
<
soap:binding
style
=
"document"
transport
=
"http://schemas.xmlsoap.org/soap/http"
/>
<
wsdl:operation
name
=
"UserRegister"
>
<
soap:operation
soapAction
=
"http://www.Register.org/MyRegister/NewOperation"
/>
<
wsdl:input
>
<
soap:body
use
=
"literal"
/>
</
wsdl:input
>
<
wsdl:output
>
<
soap:body
use
=
"literal"
/>
</
wsdl:output
>
</
wsdl:operation
>
</
wsdl:binding
>
<
wsdl:service
name
=
"MyRegister"
>
<
wsdl:port
name
=
"MyRegister"
binding
=
"tns:MyRegister"
>
<
soap:address
location
=
"http://www.Register.org/MyRegister"
></
soap:address
>
</
wsdl:port
>
</
wsdl:service
>
</
wsdl:definitions
>
12.
开始设计业务逻辑代码
package
org.Register.www.MyRegister;
public
class
MyRegister_BindingImpl
implements
org.Register.www.MyRegister.MyRegister_PortType{
public
org.Register.www.MyRegister.UserInfoResponse userRegister(org.Register.www.MyRegister.UserInfo parameters)
throws
java.rmi.RemoteException {
//
业务逻辑处理
System.
out
.println(parameters.getIn());
UserInfoResponse UserInfoResponse=
new
UserInfoResponse();
UserInfoResponse.setOut(
"ok"
);
return
UserInfoResponse;
}
}
14.
打开测试工具
xmlspy.
输入上面的
soap
地址
,
就会产生一个方法
输入页面
<
SOAP-ENV:Envelope
xmlns:SOAP-ENV
="
http://schemas.xmlsoap.org/soap/envelope/
"
xmlns:SOAP-ENC
="
http://schemas.xmlsoap.org/soap/encoding/
"
xmlns:xsi
="
http://www.w3.org/2001/XMLSchema-instance
"
xmlns:xsd
="
http://www.w3.org/2001/XMLSchema
">
<
SOAP-ENV:Body
>
<
m:UserInfo
xmlns:m
="
http://www.Register.org/MyRegister/
">
<
m:in
>
11
</
m:in
>
</
m:UserInfo
>
</
SOAP-ENV:Body
>
</
SOAP-ENV:Envelope
>
结果页面
<?xml version="1.0" encoding="UTF-8"?>
<
soapenv:Envelope
xmlns:soapenv
="
http://schemas.xmlsoap.org/soap/envelope/
"
xmlns:xsd
="
http://www.w3.org/2001/XMLSchema
"
xmlns:xsi
="
http://www.w3.org/2001/XMLSchema-instance
">
<
soapenv:Body
>
<
UserInfoResponse
xsi:type
="
ns1:UserInfoResponse
"
xmlns
="
http://www.Register.org/MyRegister/
"
xmlns:ns1
="
http://www.MyRegister.org/soapas
">
<
out
xmlns
="">
ok
</
out
>
</
UserInfoResponse
>
</
soapenv:Body
>
</
soapenv:Envelope
>
15
整个
wsdl
创建发布测试完成
!