resteasy的使用

RESTEasy是JBoss的開源項目之一,是一個RESTful Web Services框架。RESTEasy的開發者Bill Burke同時也是JAX-RS的J2EE標準制定者之一。JAX-RS是一個JCP制訂的新標準,用於規範基於HTTP的RESTful Web Services的API。JAXB-XML綁定:將XML映射成成面向對象的數據類。這個過程也有J2EE標準,而RESTEasy是全面支持JAXB的。

我們已經有SOAP了,爲什麼需要Restful WebServices?用Bill自己的話來說:"如果是爲了構建SOA應用,從技術選型的角度來講,我相信REST比SOAP更具優勢。開發人員會意識到使用傳統方式有進行SOA架構有多複雜,更不用提使用這些做出來的接口了。這時他們就會發現Restful Web Services的光明之處。"

SOA和WOA所作用的抽象層面也有所不同。前者是一種系統層面的架構模式,致力於實施可被多種應用程序消化的新業務功能;而後者則是一種接口層面的架構模式,專注於各種服務功能以何種方式提供給應用程序。

web.xml

<web-app>
   <display-name>Archetype Created Web Application</display-name>

   <context-param>
      <param-name>javax.ws.rs.core.Application</param-name>
      <param-value>com.service.ChannelApplication</param-value>
   </context-param>

   <context-param>
      <param-name>resteasy.servlet.mapping.prefix</param-name>
      <param-value>/1.0</param-value>
   </context-param>

   <listener>
      <listener-class>
         org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
      </listener-class>
   </listener>

   <servlet>
      <servlet-name>Resteasy</servlet-name>
      <servlet-class>
         org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
      </servlet-class>
   </servlet>

   <servlet-mapping>
      <servlet-name>Resteasy</servlet-name>
      <url-pattern>/1.0/*</url-pattern>
   </servlet-mapping>

</web-app>
Java類
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
public class ChannelApplication extends Application
{
   HashSet<Object> singletons = new HashSet<Object>();

   public ChannelApplication()
   {
      singletons.add(new GsmModemChannelService());     
   }

   @Override
   public Set<Class<?>> getClasses()
   {
      HashSet<Class<?>> set = new HashSet<Class<?>>();
      return set;
   }

   @Override
   public Set<Object> getSingletons()
   {
      return singletons;  
   }
}

Service 
@Path(value="smsmessaging")
public class GsmModemChannelService {	
	   
	@POST	
	@Path("outbound/requests")
	@Produces("text/html")
	public String sendMessage(
			@FormParam("address") String address,
			@FormParam("message") String message,
			@FormParam("senderName") String senderName) {			
		return "test";
	}

	@GET
	@Path("inbound/messages")
	@Produces("application/json")
	public List<Record> getMessages() {
		return getRecordList();
	}

	@GET
	@Path("inbound/messages/{sendAddress}/messages.html")
	@Produces("text/html")
	public String getMessageBySender(
			@PathParam("sendAddress") String sendAddress) throws Exception {
		
		List<Record> list = new ArrayList<Record>();
		for (Record r : getRecordList()) {
			if (r.getFromAddr().equals(sendAddress)) {
				list.add(r);
			}
		}

		JettisonMappedContext context = new JettisonMappedContext(RecordList.class);
		StringWriter writer = new StringWriter();
		Marshaller marshaller = context.createMarshaller();
		marshaller.marshal(new RecordList(list), writer);
		return writer.toString();
	}	

}

import java.util.List;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import com.magima.messenger.gsmmodem.job.Record;

@XmlRootElement(name="listing")
public class RecordList {
     private List<Record> records;

    public RecordList(){
    	
    }
    @XmlElement(name="records")
	public List<Record> getRecords() {
		return records;
	}

	public RecordList(List<Record> records) {
		this.records = records;
	}
     
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章