其实每天都是在毫无章法的学习一些开发方面的东西,每次都是想到哪里学哪里,所以一直都不系统,自己每天维护的系统就是一个很好的项目,为什么不静下心来把眼前的这个项目弄清楚呢:分析一下这个项目所使用的技术,所运用到的框架等。虽然这个项目创建的时间已经很早了,当时流行的技术框架在当下来看已经不流行了,但是对旧知识的学习会激发自己对新知识的认识,况且研究一个真实的项目一定比自己琢磨一些片段性的知识效果要更好。所以从今天开始认真研究目前维护的系统,弄清其中的原委(其实做这个项目一年半了,期间也为这个项目“贡献”了一些代码)。
其实早在之前我就分析过这个系统,但是几经尝试之后都放弃了。由于种种原因,想要获得新技能的愿望非常强烈,所以现在决心攻克它。首先这个工程是一个提供webservice功能的工程。而且是使用Apache Axis框架完成的,所以就先打算弄清楚这个框架。学习之后发现它是通过一个WSDD的配置文件来发布接口的,所以今天就搜集了关于WSDD配置文件的配置信息。
WSDD(Web Service Deployment Descriptor)是WebService中的定制发布;与即时发布相比,定制发布 更加繁琐也更加复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。定制发布需要你自己编写一个WSDD文件其实就是一个XML描述文件。(百度百科)
接下来是一个WSDD配置文件,及其标签注释:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 告诉Axis Engine这是一个部署描述文件。一个部署描述文件可以表示一个完整的engine配置或者将要部署到一个活动active的一部分组件。 -->
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<!-- 用于控制engine范围的配置。会包含一些参数 -->
<globalConfiguration>
<!-- 用来设置Axis的各种属性,参考Global Axis Configuration,可以配置任意数量的参数元素 -->
<parameter name="adminPassword" value="admin" />
<!-- 设置一个SOAP actor/role URI,engine可以对它进行识别。这允许指向这个role的SOAP headers成功的被engine处理 -->
<role/>
<!-- 全局的请求Handlers。在调用实际的服务之前调用 -->
<requestFlow>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="session" />
</handler>
<handler type="java:org.apache.axis.handlers.JWSHandler">
<parameter name="scope" value="request" />
<parameter name="extension" value=".jwr" />
</handler>
</requestFlow>
<!-- 全局响应Handlers,在调用完实际的服务后,还没有返回到客户端之前调用 -->
<responseFlow/>
</globalConfiguration>
<!-- 用于定义Handler,并定义handler的类型。"Type" 可以是已经定义的Handler或者是"java:class.name"形式的QName。可选的"name"属性允许将这个Handler的定义在其他部署描述部分中引用。可以包含任意数量的<parameter name="name" value="value">元素. -->
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" />
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" />
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
<!-- 部署/卸载一个Axis服务,这是最复杂的一个WSDD标签。 -->
<service name="AdminService" provider="java:MSG">
<!-- allowedMethods: 每个provider可以决定那些方法允许web services访问,指定一个以空格分隔的方法名,只有这些方法可以通过web service访问。也可以将这个值指定为”*”表示所有的方法都可以访问。同时operation元素用来更进一步的定义被提供的方法,但是它不能决定方法的可见性 -->
<parameter name="allowedMethods" value="AdminService" />
<parameter name="enableRemoteAdmin" value="false" />
<!--className:后台实现类,即暴露接口的类-->
<parameter name="className" value="org.apache.axis.utils.Admin" />
<namespace>http://xml.apache.org/axis/wsdd/</namespace>
</service>
<!-- provider="java:RPC" 默认情况下所有的public方法都可以web service方式提供-->
<service name="TestService" provider="java:RPC">
<parameter name="allowedMethed" value="sayHello"/>
<parameter name="scope" value="Request"/>
<parameter name="className"
value="adam.bp.workflow.webservice.test.WebServicesTest"/>
</service>
<!-- 定义了一个服务器端的传输。当一个输入请求到达的时候,服务器传输被调用 -->
<transport name="http">
<!-- 指定handlers/chains 在请求被处理的时候被调用,这个功能和service元素中的功能一样。典型的传输请求响应handler实现了关于传输的功能。例如转换协议headers等等 -->
<requestFlow>
<handler type="URLMapper" />
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
</transport>
<transport name="local">
<!-- 指定handlers/chains 在响应被处理的时候被调用,这个功能和service元素中的功能一样。典型的传输请求响应handler实现了关于传输的功能。例如转换协议headers等等 -->
<responseFlow>
<handler type="LocalResponder" />
</responseFlow>
</transport>
</deployment>
参考:http://jyao.iteye.com/blog/1285516
http://blog.csdn.net/trocp/article/details/6757063
http://blog.csdn.net/hu_shengyang/article/details/7471691
20160919