<wsdd> 使用AdminClient无法从deploy.wsdd生成server-config.wsdd

使用axis来发布自己的webservice服务通常两种方法,一是即时发布 JWS (Java Web Service) Files - Instant Deployment ,即通过jws文件发布,二是定制发布 Custom Deployment - Introducing WSDD。前者发布不支持服务类在package里,还有众多不便,现在已很少使用,后者经常被使用(其实我现在更多的是用tuscany来发布服务,更方便)。

现在是使用电信提供的wsdl来完成短信业务,需要接收短信时就必须自己作为服务端,让电信网关当客户端调用。拿到wsdl生成服务端代码并完成自己的业务后,需要发布自己的接口。这时候就用网上提供的方法:
1.开启自己应用所在的tomcat(这个必须开启)
2.cmd到WEB-INF路径下,使用
>java -Djava.ext.dirs=lib org.apache.
axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deploy.wsdd

说明:deploy.wsdd是服务端代码生成后生出的文件,手动把它放在WEB-INF下,需要根据这个文件生成server-config.wsdd才是对外发布webservice接口。AdminClient是Axis-1.*.jar提供的工具类,可以完成这个功能。命令行里直接输入java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient可以看到这个命令的帮助信息。

第二步完成后如果成功就能在WEB-INF下看到需要的文件了,但报错:


这就是说后面带的参数找不到,很多网上都直接提供这个参数,我还以为是axis包里自带的呢,后来查到 http://www.360doc.com/content/11/0711/11/16915_132858375.shtml说明这个是配置的servlet,要按自己实际的工程填写,原来这样,在web.xml里配置:
        <servlet>
	    <servlet-name>AxisServlet</servlet-name>
		<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>	
	</servlet>

<!--不要下面注释掉的这样配置,这样会拦截掉所有请求,导致只能请求webservice,其他页面都无法访问-->
	<!--<servlet-mapping>
	    <servlet-name>AxisServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>-->
        
<!--可以下面这样配置,这样访问http://localhost:8080/工程name/services/可以展示所有通过axis发布的webservice服务,访问http://localhost:8080/工程name/services/webservice服务名?wsdl可以查看wsdl文件-->
        <servlet-mapping>
            <servlet-name>AxisServlet</servlet-name>
            <display-name>查看Services列表</display-name>
            <url-pattern>/services/</url-pattern>
        </servlet-mapping>

        <servlet-mapping>
            <servlet-name>AxisServlet</servlet-name>
            <display-name>Services地址</display-name>
            <url-pattern>/services/*</url-pattern>
        </servlet-mapping> 

重启tomcat后输入:
>java -Djava.ext.dirs=lib org.apache.
axis.client.AdminClient -lhttp://localhost:8080/smsplatform/services/AxisServlet deploy.wsdd


返回:
Processing file deploy.wsdd
<Admin>Done processing</Admin>

查看server-config.wsdd文件已生成,在浏览器里测试:
http://localhost:8080/smsplatform/services/SmsNotification?wsdl
返回的是wsdl文件,成功。这里的smsplatform是应用的根目录,SmsNotification是server-config.wsdd文件的service的name。




wsdl文件最后绑定的地址是可以修改的,但注意跟AxisServlet的servlet-mapping要对应。再次声明使用tuscany来发布webservice比这简单好多。

【错误:】 最后最后,把添加的servlet去掉,发布的工程里不需要这个。
【更正2014-06-17:】servlet的配置不能删掉,需要访问axis发布的webservice必须使用这个servlet的配置。之前发布好之后工作暂停,注释之后继续了其他工作,没有验证,得出了错误的结论,自以为是了。

猜你喜欢

转载自zoroeye.iteye.com/blog/2069274