2012-03-12 81 views
1

我有一個服務層,我想轉換成一個web服務。但是我討厭使用註釋,因爲它們嚴重限制了我的公共基類中的代碼可重用性。一些網絡服務使用對象的一個​​子集,我不希望暴露一件服務的事情暴露給另一件服務。使用xml代替jaxb註釋的Java webservice工具?

我與hibernate有同樣的問題,但hbm xml映射允許我共享相同的域對象,併爲不同的服務有不同的映射,這很好。有什麼樣的休息Web服務框架的Java,將允許我用xml描述我的api和計劃對象,並仍然獲得將這些對象轉換爲json/xml等的好處嗎?

回答

0

注:我是EclipseLink JAXB (MOXy)領導和JAXB 2 (JSR-222)專家組的成員。

EclipseLink JAXB(MOXy)有一個擴展名,允許您將元數據表示爲XML文件。您可以使用ContextResolver在JAX-RS的環境利用該元數據:

package blog.bindingfile.jaxrs; 

import java.io.*; 
import java.util.*; 

import javax.ws.rs.Produces; 
import javax.ws.rs.ext.*; 
import javax.xml.bind.*; 

import org.eclipse.persistence.jaxb.JAXBContextFactory; 

import blog.bindingfile.Customer; 

@Provider 
@Produces({"application/xml", "application/json"}) 
public class CustomerContextResolver implements ContextResolver<JAXBContext> { 

    private JAXBContext jc; 

    public CustomerContextResolver() { 
     Map<String, Object> props = new HashMap<String, Object>(1); 
     props.put(JAXBContextFactory.ECLIPSELINK_OXM_XML_KEY, "blog/bindingfile/binding.xml"); 
     jc = JAXBContext.newInstance(new Class[] {Customer.class} , props); 
    } 

    public JAXBContext getContext(Class<?> clazz) { 
     if(Customer.class == clazz) { 
      return jc; 
     } 
     return null; 
    } 

} 

更多信息

相關堆棧溢出的問題

+0

嗯所以請原諒我的無知,但是這會是一個不錯的選擇,如果我不希望產生額外的客戶端對象,但而是使用xml中指定的我的域對象的子集?這樣我可以有一個域對象,但是客戶沒有看到所有的字段? – user842800 2012-03-12 21:32:33

+0

@ user842800 - 是的,這是一個可以利用MOXy的外部映射文檔的常見用例。 – 2012-03-12 21:40:24

0

您可以在WADL(基於XML)中描述您的Web服務,然後使用CXF's wadl2java tool生成您的代碼。請注意,WADL尚未廣泛採用,因此您必須決定對您而言有多重要,以執行合同優先的REST服務。

0

Spring Web Services是另一個基於XML的Web服務發佈免註釋框架。你應該試一試