使用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
[b]说明[/b]:deploy.wsdd是服务端代码生成后生出的文件,手动把它放在WEB-INF下,需要根据这个文件生成server-config.wsdd才是对外发布webservice接口。AdminClient是Axis-1.*.jar提供的工具类,可以完成这个功能。命令行里直接输入java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient可以看到这个命令的帮助信息。
第二步完成后如果成功就能在WEB-INF下看到需要的文件了,但报错:
[img]http://dl2.iteye.com/upload/attachment/0097/3595/7dad2664-6c8a-30fa-81b6-92271cf8e9d1.bmp[/img]
这就是说后面带的参数找不到,很多网上都直接提供这个参数,我还以为是axis包里自带的呢,后来查到[url]http://www.360doc.com/content/11/0711/11/16915_132858375.shtml[/url]说明这个是配置的servlet,要按自己实际的工程填写,原来这样,在web.xml里配置:
重启tomcat后输入:
返回:
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。
[img]http://dl2.iteye.com/upload/attachment/0098/1822/f89eadf3-146c-3c03-881e-8d62b29ce5e7.bmp[/img]
[img]http://dl2.iteye.com/upload/attachment/0098/1824/35f4205d-fd91-3339-bbaf-5f2de84ce444.bmp[/img]
wsdl文件最后绑定的地址是可以修改的,但注意跟AxisServlet的servlet-mapping要对应。再次声明使用tuscany来发布webservice比这简单好多。
【错误:】[color=red]最后最后,把添加的servlet去掉,发布的工程里不需要这个。[/color]
【更正2014-06-17:】servlet的配置不能删掉,需要访问axis发布的webservice必须使用这个servlet的配置。之前发布好之后工作暂停,注释之后继续了其他工作,没有验证,得出了错误的结论,自以为是了。
现在是使用电信提供的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
[b]说明[/b]:deploy.wsdd是服务端代码生成后生出的文件,手动把它放在WEB-INF下,需要根据这个文件生成server-config.wsdd才是对外发布webservice接口。AdminClient是Axis-1.*.jar提供的工具类,可以完成这个功能。命令行里直接输入java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient可以看到这个命令的帮助信息。
第二步完成后如果成功就能在WEB-INF下看到需要的文件了,但报错:
[img]http://dl2.iteye.com/upload/attachment/0097/3595/7dad2664-6c8a-30fa-81b6-92271cf8e9d1.bmp[/img]
这就是说后面带的参数找不到,很多网上都直接提供这个参数,我还以为是axis包里自带的呢,后来查到[url]http://www.360doc.com/content/11/0711/11/16915_132858375.shtml[/url]说明这个是配置的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。
[img]http://dl2.iteye.com/upload/attachment/0098/1822/f89eadf3-146c-3c03-881e-8d62b29ce5e7.bmp[/img]
[img]http://dl2.iteye.com/upload/attachment/0098/1824/35f4205d-fd91-3339-bbaf-5f2de84ce444.bmp[/img]
wsdl文件最后绑定的地址是可以修改的,但注意跟AxisServlet的servlet-mapping要对应。再次声明使用tuscany来发布webservice比这简单好多。
【错误:】[color=red]最后最后,把添加的servlet去掉,发布的工程里不需要这个。[/color]
【更正2014-06-17:】servlet的配置不能删掉,需要访问axis发布的webservice必须使用这个servlet的配置。之前发布好之后工作暂停,注释之后继续了其他工作,没有验证,得出了错误的结论,自以为是了。