wsdl自动生成web service的client和server,Java类详解,以及webservice访问

wsdl的结构:
<?xml version="1.0" encoding="UTF-8"?>
<definitions name=" " xmlns="默认wsdl命名空间"
     xmln:soap="soap命名空间"
     xmlns:tns="自定义schema命名空间"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"
     targetNameSpace="自定义schema命名空间">
<types><xsd:schema>自定义的schema</xsd:schema></types>
<message name="...request"><part></part></message>
<message name="...response"><part></part></message>
<portype>定义抽象操作和抽象消息的组合</portype>
<binding>具体化<portype>元素</binding>
<service></service>
</definitions>

通过wsdl生成的Java客户端包含5类Java类:
(1)schema定义的数据结构类;
(2)ObjectFactory.java:每个wsdl生成的java类中都有这个;
        在调用客户端的时候,似乎不需要用到ObjectFactory
(3)<service>中定义的webservice类,类名与name元素值一致
(4)<portType>定义的Java类,类名与name元素值一致
(5)package-info.java:每个wsdl生成的Java类中都有这个。
通过wsdl生成的Java服务端也包含5类Java类:
(1)schema定义的数据结构类;
(2)ObjectFactory.java:每个wsdl生成的java类中都有这个;
(3)<service>中定义的webservice类,类名与name元素值一致
(4)<portType>定义的Java类,类名在name元素值基础上加了SOAPImpl
(5)package-info.java:每个wsdl生成的Java类中都有这个。
只有(4)不同。但server中的(4)生成的类与(3)中的类相同

然后是wsdl生成的web service访问问题:
1.根据wsdl虽然生成了webservice,但是如何访问这个通过tomcat发布的webservice
根据HelloWolrd的对比研究发现:作为webservice发布后,会生成一个sun-jaxws.xml的文件,其中定义了访问该webservice的接口部分,在url-pattern部分。
工程被发布后,浏览器端访问工程是通过localhost:8080/工程名/url-pattern来调用实现的。

2.根据wsdl生成了客户端跟服务端 ,客户端只是一个调用接口,那么服务端还需要实现函数,在用wsdl生成的服务端中实现函数,会不会对造成已生成的其他Java类造成影响。导致程序无法正常运行。
由1得知:正确的由wsdl生成的webservice client和web service server的流程是,先通过tomcat部署,根据生成的sun-jaxws.xml文件中url-pattern来重新定义wsdl中service的地址,即soap:address location。要注意的是,sun-jaxws.xml是在由wsdl生成webservice服务端只后产生的。

也就是说要在wsdl中定义service的location地址需要严格的定义:localhost:8080/工程名/port中定义的name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值