Tuscany可以簡單地通過配置文件來發布web service。(工具eclipse 3.5)
1. 新建動態web項目,指定classpath編譯後的存儲路徑爲WebContent/WEB—INF/classes。(可右鍵項目,屬性,Java Build Path,Source修改)將Tuscany的jar包都複製到webContent/Web-INF/lib下(此處使用的Tuscany 1.6,最新版本是2.0以上,不要提醒我說有些jar包不是必須的...都加進去也不多,省的到處提示你報錯)。
2. 新建接口、實現類等。
User實體類
- package tuscany.webService.service;
- public class User {
- private String name;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
IUserservice服務接口
- package tuscany.webService.service;
- import java.util.List;
- import org.osoa.sca.annotations.Remotable;
- //測試發現是必須的
- @Remotable
- public interface IUserservice {
- List<User> getAll();
- }
IUserservice接口實現類-UserServiceImpl.java
- package tuscany.webService.service;
- import java.util.*;
- // implements IUserservice 可以不寫,在構件配置中寫出即可
- public class UserServiceImpl{
- private static List<User> users = null;
- public List<User> getAll() {
- User user1=new User();
- user1.setName("user1");
- User user2=new User();
- user2.setName("user2");
- users=new ArrayList<User>();
- users.add(user1);
- users.add(user2);
- return users;
- }
- }
給出文件結構圖,便於設置發佈文件時對照觀看-
3. 配置發佈文件
3.1 構件配置文件(.composite)-構件配置文件是用於指出發佈的服務(service)和實現該服務的組件(component)
在classpath(根路徑下)新建User.composite
- <?xml version="1.0" encoding="UTF-8"?>
- <composite xmlns="http://www.osoa.org/xmlns/sca/1.0"
- xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.0" name="UserComposite"
- targetNamespace="http://test.tuscany.webService">
- <!--composite元素中name爲該構件的名,在sca-contribution部署composite時被使用
- 此處的targetNamespace與sca-contribution中的targetNamespace必須相同 -->
- <!--組件,實現了服務UserService-->
- <component name="UserServiceImpl">
- <implementation.java class="tuscany.webService.service.UserServiceImpl"></implementation.java>
- </component>
- <!--對外提供的服務-->
- <service name="UserService" promote="UserServiceImpl">
- <interface.java interface="tuscany.webService.service.IUserservice" />
- <!--定義了發佈服務綁定的協議,使用webservice-->
- <binding.ws></binding.ws>
- </service>
- </composite>
補充:也可以在src下新建一文件夾或者包用於存放.composite文件,前提就是需要保證編譯後的文件會被放到WEB-INF/classes下面。元素composite中的name爲構件名。
3.2 部署文件(sca-contribution.xml),放在WebContent/META-INF下。
- <?xml version="1.0" encoding="UTF-8"?>
- <contribution xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:tuscanyWeb="http://test.tuscany.webService">
- <!-- 指出要部署的構件,格式爲-命名空間別名:構件名 -->
- <deployable composite="tuscanyWeb:UserComposite"/>
- </contribution>
補充:.composite中的targetNamespace=sca-contribution.xml中的xmlns:tuscanyWeb的值!xmlns:tuscanyWeb可以隨便命名,只是用來代表命名空間,在deployable元素中使用,deployable元素中指出的構件名爲.composite文件中composite元素的name屬性值。無需指出composite文件的存儲位置,tuscany會自動搜索。
4. web.xml中配置Tuscany攔截器
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
- <display-name>TuscanyWebService</display-name>
- <filter>
- <filter-name>tuscany</filter-name>
- <filter-class>org.apache.tuscany.sca.host.webapp.TuscanyServletFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>tuscany</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- </web-app>
將應用發佈到應用服務器上,輸入http://localhost:8080/TuscanyWebService/UserService?wsdl,即可看到服務UserService的WSDL描述文件,表示web服務發佈成功,可以外部調用。(本例是使用的應用服務器爲tomcat6.0)。應用發佈可以打包成war包放到tomcat/webapps下,啓動startup.bat。在eclipse中,直接右鍵項目,run as, run on server。