環境:myeclipse 8.0,tomcat6.0 jdk 1.5+
1,首先new 一個web project
2,添加必須的jar (bulid path):

首先建立server端:
如果客戶端使用是不是用myeclipse自動生成,我們在這建立一個接口:
@WebService
public interface ServerJaxI {
public List<User> getUser(User user);
}
當然@webServer 是必須的
接下來是實現:
@javax.jws.WebService(targetNamespace = "http://server.com/", endpointInterface="com.server.ServerJaxI", serviceName = "ServerJaxService", portName = "ServerJaxPort")
@SOAPBinding(style=Style.RPC)
public class ServerJax implements ServerJaxI{
public List<User> getUser(User user){
System.out.println("get User:"+user.getName());
return UserManager.getUsers();
}
}
其中User:
public class User implements Serializable{
private static final long serialVersionUID = 1L;
private String name;
private String pwd;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
UserManager:
public class UserManager {
private static List<User> users;
static{
users = new ArrayList<User>();
for (int i = 0; i < 10; i++) {
User user = new User();
user.setName("name_"+i);
user.setPwd("pwd_"+i);
users.add(user);
}
}
public static List<User> getUsers() {
// TODO Auto-generated method stub
return users;
}
}
然后我們使用myeclipse的根據bean生成webserver方法來產生配置文件:點擊項目--》new webservice 選擇根據javaclass 生成:
然后就會看見 在web-info下多了sun-jaxws.xml
內容:
<?xml version = "1.0"?>
<endpoints version="2.0"
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
<endpoint name="ServerJaxPort"
implementation="com.server.ServerJax"
url-pattern="/ServerJaxPort">
</endpoint></endpoints>
web.xml也發成了改變:被添加了相應的支持這些類都在前面添加的jar里面 如果不添加就會出現com.sun.xml.ws.transport.http.servlet.WSServletContextListener不能找到的錯誤。
<servlet>
<description>JAX-WS endpoint - ServerJaxService</description>
<display-name>ServerJaxService</display-name>
<servlet-name>ServerJaxService</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServerJaxService</servlet-name>
<url-pattern>/ServerJaxPort</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener></web-app>
ok。現在我們部署項目啟動 通過以下鏈接訪問:htttp://localhost:8080//pro/ServerJaxPort 其中ServerJaxPort 是在sun-jaxws.xml里面定義的url-pattern 這是我們就能看見
我們發布的服務了:
客戶端:
當然客戶端可以通過myeclipse自動生成:我們采用不自動成的方式:也就是通過接口方式來獲取(這也就是前面定義接口的原因),當然采取自動生成的方式話就不用定義接口:
當然采用接口的方式:就需要接口需要的類:
上面我們定義的接口:
@WebService
public interface ServerJaxI {
public List<User> getUser(User user);
}
要調用這個接口就需要User 和這個接口類
1,首先我們new 一個java project 將ServerJaxI 和User代碼拷貝過來 包名相同:
然后就是我們的客戶端代碼
public class Clientj {
public static void main(String[] args) {
try {
URL url = new URL("http://localhost:8080/jaxws/ServerJaxPort?wsdl");//wsdl 地址
QName qname = new QName("http://server.com/","ServerJaxService"); //其中第一個參數為:namespaceURI 第二個為servername
Service service = Service.create(url, qname);
ServerJaxI s = service.getPort(ServerJaxI.class);
User user = new User();
user.setName("qiaobing");
System.out.println(s.getUser(user).get(1).getName());
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
運行就可以看見結果了。
示例代碼下載:
//----------------------
map講不能得到支持
因此可以簡單的封裝下,(或者通過XmlAdapter<ValueType, BoundType>來封裝)
例如UserMap.java:
public class UserMap{
private HashMap<String, User> users;
public UserMap(){
users = new HashMap<String, User>();
}
public HashMap<String, User> getUsers() {
return users;
}
public void setUsers(HashMap<String, User> users) {
this.users = users;
}
public void put(String key,User user){
users.put(key, user);
}
public User get(String key){
return users.get(key);
}
}
這樣就可以通過UserMap來傳遞map數據。
服務端:
/Files/freeman1984/jaxws.rar
客戶端:
/Files/freeman1984/jaxwsclient.rar