web service

学习笔记
第15章,开发xfire,web,service应用

1.中间交互层标注协议(不同系统交互的中间语言.接口)

2.web service 基于网络,分布式的模块化组件

3.
soap 简单对象访问协议
wsdl web服务描述语言
uddi 统一描述/发现/集成

client<--soap 通过http交换xml-->server
client--查找-->uddi--描述信息-->wsdl-描述服务-->server
client--(查找-->uddi  列出服务可略)--指向服务-->server


数据绑定,协议和传输独立性,web服务REST样式支持,易开发

4.xfire (java servlet2.4+容器)
基于spring代理机制(pojo->spring生成代理类->xfire核心servlet将其暴露为webservice

客户端开发:XFire HTTP Client Libraries


JAX-WS JAX-RPC (javaee5?)
web service project
web service

jetty and tomcat do not implement the entire javaee 5 spac and will need the JAX-WS libraries
=========================
使用xfire 创建web service project ,添加web service功能 添加核心包,客户端包

 //client 代码
	public static void main(String[] args) {
		Service serviceModel = new ObjectServiceFactory().create(IHelloWorldService.class);
		XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());
		String url = "http://localhost:8080/HelloWorld/services/HelloWorldService";
		try {
			IHelloWorldService service = (IHelloWorldService) factory.create(serviceModel, url);//service
			String result = service.hi("hello world");
			System.out.print(result);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}


///////////////////////第三方服务调用
    public static void main(String[] args) {
        MobileCodeWSClient client = new MobileCodeWSClient();
		//create a default service endpoint
        MobileCodeWSSoap service = client.getMobileCodeWSSoap();
        
        ArrayOfString arrs=service.getDatabaseInfo();
        if(arrs!=null){
        List<String> lists=arrs.getString();
        	for(String s:lists){
        		if(s.indexOf("厦门")!=-1)
        			System.out.println(s);
        	}
        	System.out.println("=========");
        }
        System.out.println(service.getMobileCodeInfo("15812345678", null));
    	System.exit(0);
    }



客户端-->soap 请求信封-->地址对应servlet方法-->得到soap响应信封-->解析-->结果

避免jar包冲突 包含spring包

5.javaEE5 支持JSR-181 规定web服务标注 
xfire支持JSR-181
jboss,glassfish,weblogic10都支持javaee5 ,tomcat只是web层,不支持ejb和web服务开发

a)使用xfire开发  对pojo标注配置为web服务,加入services.xml发布服务
@WebService标注被xfire读取最终生成web service
http://localhost:8080/HelloWorldService/services/Jsr181EchoService?wsdl
项目,services,无serviceName默认类名称?wsd

@WebService(name = "EchoService", serviceName = "EchoServiceTest", targetNamespace = "http://www.openuri.org/2004/04/HelloWorld")
public class Jsr181EchoService {
	
	@WebMethod(operationName = "echoString", action = "urn:EchoString")
	@WebResult(name = "echoResult")
	public String echo(@WebParam(name = "echoParam", header = true)String input) {
		return input;
	}
}


service.xml配置
<service>
  <name>ServiceName</name> <!--最终发布名以此为准-->
  <namespace>http://www.un.gov/HelloEcho</namespace>

  <serviceClass>echo.Jsr181EchoService</serviceClass>
  <serviceFactory> <!--要是annotationServiceFactory才可-->
     org.codehaus.xfire.annotations.AnnotationServiceFactory
  </serviceFactory>
</service>



b)使用javaee5开发(需服务器支持javaee5)pojo,在web.xml配置为servlet

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class HelloWorldService {
@WebMethod
public String hello(String name) {
return "欢迎您访问 JBoss Web 服务:" + name;
}
}



发布
<servlet>
<servlet-name>HelloWorldService</servlet-name>
<servlet-class>webservice.HelloWorldService</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldService</servlet-name>
<url-pattern>/HelloWorldService/*</url-pattern>
</servlet-mapping>



jboss服务路径:http://localhost:8080/JBossWS/HelloWorldService/?wsdl

新建wsdl
prefix:tns
create wsdl skeleton
protocol:soap
soap binding options:document literal
                

6.Web Service Security

7.暴露的方法变量应为简单类型(字符,数组,整数)
或POJO?

你可能感兴趣的:(spring,Web,webservice,网络协议,SOAP)