This is the Java Project
首先是SEI,即服务端接口类HelloService.java
[java]
package com.jadyer.service;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
/**
* SEI(Service Endpoint Interface)
* @see -------------------------------------------------------------------------------------
* @see 这里使用类级别注解@WebService是为了标注该接口的方法将公开为Web服务
* @see 它默认会公开所有方法,若想屏蔽某个方法,可以使用@Method的exclude=true属性
* @see -------------------------------------------------------------------------------------
* @see 默认的生成的wsdl中方法参数名是arg0,arg1,返回值是return
* @see 这样很不便于观察,所以我们可以使用@WebResult和@WebParam注解
* @see @WebResult和@WebParam可以指定生成的wsdl文件中的方法参数名和返回值
* @see -------------------------------------------------------------------------------------
* @see 这里要注意:如果一个WebServices服务已经发布,再来修改服务细节,如方法参数名和返回值
* @see 尽管没有修改方法内部逻辑,但再重新发布完服务后,相应的客户端也要做修改,如重新wsimport本地类
* @see 这是因为wsdl文件已被修改(尽管改的只是参数名字),而客户端所请求的wsdl与新wsdl在内容上是不同的
* @see 若客户端未重新wsimport,会导致请求服务成功(实际是假象的成功)但得不到正确的结果
* @see 所以服务一旦发布就不要轻易修改
* @see -------------------------------------------------------------------------------------
* @create Mar 17, 2013 12:11:24 AM
* @author 玄玉
*/
@WebService
public interface HelloService {
@WebResult(name="addResult")
public int add(@WebParam(name="a")int a, @WebParam(name="b")int b);
@WebResult(name="sayHelloResult")
public String sayHello(@WebParam(name="name")String name);
}
然后是SIB,即服务端接口实现类HelloServiceImpl.java
[java]
package com.jadyer.service;
import javax.jws.WebService;
/**
* SIB(Service Implemention Bean)
* @see -----------------------------------------------------------------------------------------
* @see 如果该实现类还实现了其它接口,那么就需要在@WebService上使用endpointInterface指定SEI
* @see 如@WebService(endpointInterface="com.jadyer.service.HelloService")
* @see 有一个比较奇怪的现象是,本例中如果没有加endpointInterface属性,那么SEI中的@WebParam会失效
* @see -----------------------------------------------------------------------------------------
* @create Mar 17, 2013 12:11:24 AM
* @author 玄玉
*/
@WebService(endpointInterface="com.jadyer.service.HelloService")
public class HelloServiceImpl implements HelloService {
@Override
public int add(int a, int b) {
System.out.println(a + "+" + b + "=" + (a+b));
return a+b;
}
@Override
public String sayHello(String name) {
System.out.println("Receive the name=[" + name + "]");
if(null==name){
return "Hello,World";
}else{
return "Hello," + name;
}
}
}
最后是用于发布服务的MainApp.java
[java]
package com.jadyer.server;
import javax.xml.ws.Endpoint;
import com.jadyer.service.HelloServiceImpl;
/**
* 基于JAX-WS的WebServices入门
* @see JAX-WS(Java API for XML Webservices)
* @see -------------------------------------------------------------------------------------------------
* @see 两个常见的名词SEI和SIB
* @see SEI(Service Endpoint Interface)--服务提供的接口,本例中指的就是HelloService.java