webservice-xfire笔记
发布时间:2020-12-17 02:04:05 所属栏目:安全 来源:网络整理
导读:服务端创建: (1) web.xml中配置。 ? context-param ?????? param-namecontextConfigLocation/param-name ?????? param-value ??????????? classpath:org/codehaus/xfire/spring/xfire.xml ??????????? /WEB-INF/applicationContext.xml ?????? /param-value
服务端创建:
(1) web.xml中配置。 ? <context-param> ?????? <param-name>contextConfigLocation</param-name> ?????? <param-value> ??????????? classpath:org/codehaus/xfire/spring/xfire.xml ??????????? /WEB-INF/applicationContext.xml ?????? </param-value> ??? </context-param> ? ? <servlet> ? ?<servlet-name>xfireServlet</servlet-name> ? ?<servlet-class>org.codehaus.xfire.spring.XFireSpringServlet</servlet-class> ? </servlet> ? ? <servlet-mapping> ?<servlet-name>xfireServlet</servlet-name>? ?<url-pattern>/services/*</url-pattern> ? </servlet-mapping> ? ? <listener> ? ?<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> ? </listener>?
(2)
编写web service的接口入实现类; package com.zcq.services; public interface HelloService { ?public String sayHello(String name); }
package com.zcq.services;
public class HelloserviceImp implements HelloService { ?public String sayHello(String name) { ??String result =name+"祝你学习webservice 成功"; ??return result; ?} } spring配置文件中配置: <beans> ??? <bean id="helloExporters" class="org.codehaus.xfire.spring.remoting.XFireExporter"> ??? ?<property name="serviceFactory" ref="xfire.serviceFactory"></property> ??? ?<property name="xfire" ref="xfire"></property> ?? ? ?<property name="serviceBean" ref="helloserviceImp"></property> ??? ?<property name="serviceClass" value="com.zcq.services.HelloService"></property> ??? ?<property name="name" value="firstHelloService"></property> ??? </bean> ??? <bean id="helloserviceImp" class="com.zcq.services.HelloserviceImp"></bean> </beans>
(3)
验证发布是否成功:
其中的<property name="name" value="firstHelloService"></property>,将会出现在地址:
http://localhost:8088/xfireHello/services/firstHelloService?wsdl 当有地址栏上打入以前地址,可以看到soap文件时,证明web seriviece发布成功。
可以打入地址:
http://localhost:8088/xfireHello/services
来查看所有的web services服务。
客户端创建: (4) 利用eclipse的xfire插件来生成web service client: 1. 创建一个web service project. new --> web service project,在弹出页面中,填入项目名,选择framework:xfire. 2. new-->other-->web service client-->默认下一步,在第二个向导界面中: 在wsdl url中,输入上面的地址: http://localhost:8088/xfireHello/services/firstHelloService?wsdl (即是利用wsdl url来生成client); 在java package中,新建一个源码的存放包,如com.client. 3. 默认下一步到完成。中间,可能会出现一小点认证出错,可以不管。 但注意: 在用插件进行生成客户端时,web service的服务端须运行,否则生成客户端时会出错。 4. 生成成功后,会在客户端的项目中,自己生成两包: 服务端对应的包,如:com.zcp.servcies, 及刚刚创建的客户端包,如:com.client. 5. 在com.client包中: firstHelloServiceClient.java中编写调用服务端的代码即可。如下: ??? public static void main(String[] args) { //插件自动生成的代码, ??????? firstHelloServiceClient client = new firstHelloServiceClient(); ??//create a default service endpoint ??????? firstHelloServicePortType service = client.getfirstHelloServiceHttpPort();
//自己添加的代码,
??????? System.out.println(service.sayHello("jason")); ??????? ??System.out.println("test client completed"); ??????? ??System.exit(0); ??? }
至于端口的输入/输出参数,可以参照另一类:firstHelloServicePortType.java.
其自动生成的代码如下: @WebService(name = "firstHelloServicePortType",targetNamespace = " http://services.zcq.com") @SOAPBinding(use = SOAPBinding.Use.LITERAL,parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) public interface firstHelloServicePortType { ??????? //web service的方法 ?@WebMethod(operationName = "sayHello",action = "") ??????? //web service返回结果集 ?@WebResult(name = "out",targetNamespace = " http://services.zcq.com") ??????? //方法名,参数,返回值 ?public String sayHello( ???@WebParam(name = "in0",targetNamespace = " http://services.zcq.com") ???String in0); }
其中的targetNamespace="
http://services.zcq.com
",刚好是服务端包的逆写。
?
(5)
不用自动生成的客户端代码,可以用以下两种方式来编写代码:
方式一:
若服务提供者告诉你interface,可以用此方式:
import java.net.MalformedURLException;
import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory; ????Service serviceModel = new ObjectServiceFactory().create(HelloService. class); ????HelloService service = (HelloService) ???????????? new XFireProxyFactory().create(serviceModel,"http://localhost:8088/xfireHello/services/firstHelloService"); ????System.out.println(service.sayHello("herry"));
?
方式二:(比较推荐)
??Client client = new Client(new URL(
????"http://localhost:8088/xfireHello/services/firstHelloService?wsdl")); ??Object[] results = client.invoke("sayHello",new Object[] { "jason" }); ??System.out.println(results[0]);
?
(6)
web service的作用:
可以让服务端与客户调用端完全分离,毫不相关。
如,天气预报,股市数据,其服务端是在气象站或证券交易所,其它网站,软件如何来获取其数据的(如天气预报):
1.goolge一下:天气预报 wsdl
??? 从中获取一个wsdl链接,输入地址栏,若可以看到出现soap文件,即说明此服务可用。
2.
同样,用插件及刚刚的wsdl地址来生成web service的客户端,运行即可获取服务端的数据了。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |