2014-09-04 33 views
3

有沒有可能 soap-webservice可以輸出json格式而不是xmlJAX-WS webservice的JSON輸出?

@Component 
@WebService 
public class HRSService { 

    @WebMethod 
    public String test(String value) { 
     return value; //returned as XML. JSON possible? 
    } 
} 
+1

我不這麼認爲。例如,SOAP協議有許多特性--WS安全性。我不知道它可以與JSON而不是XML一起工作。但是,當然你可以編寫一些REST服務並按照你的意願進行編組。 – user1516873 2014-09-04 08:43:00

+1

這可能與CXF,但有一些缺點解釋在這裏:http://cxf.apache.org/docs/jax-rs-and-jax-ws.html – 2014-09-04 09:14:20

+0

它應該是可能的。 JAXB能夠使用Moxy實現來編組和解組JSON。我不能說它能夠很順利地使用'@ WebService',這是一個非常高級的特性,但是使用'@ WebServiceProvider',它應該是非常簡單的。另一個選擇是使用'@ WebService'的['@ UsesJaxbContext'](http://stackoverflow.com/q/5627173/1530938)。最終,如果你在控制JAXBContext,你應該能夠把它關閉 – kolossus 2014-09-04 16:19:19

回答

4

顯然,這是可以通過以下的https://jax-ws-commons.java.net/json/

的指示以及總結:

@BindingType(JSONBindingID.JSON_BINDING) 
public class MyService { 

    public Book get(@WebParam(name="id") int id) { 
     Book b = new Book(); 
     b.id = id; 
     return b; 
    } 

    public static final class Book { 
     public int id = 1; 
     public String title = "Java"; 
    } 
} 

你只需要在你的WEB-INF/libjaxws-json.jar這個工作。

我希望它有幫助!

1

這已經很晚了。我最近回到使用Java進行編程,但對於那些將來訪問此頁面的用戶。 JAXWS metro文檔中的示例僅適用於JavaScript。我用的是同一起的JSONObject如下:

@WebServiceProvider 
@ServiceMode(value = Service.Mode.MESSAGE) 
@BindingType(value=HTTPBinding.HTTP_BINDING) 

然後實現提供商(數據源),如例子:

public class clazz implements Provider<DataSource> 
{ ... 

    @Override 
    public DataSource invoke(DataSource arg) 
    { 
     ... 
     String emsg = "Request Parameter Error."; 
     String sret = create_error_response(emsg); 

     return getDataSource(sret); 
    } 
} 

private DataSource getDataSource(String sret) 
{ 
    ByteArrayDataSource ds = new ByteArrayDataSource(sret.getBytes(), "application/json"); 
    return ds; 
} 

public String create_error_response(String msg) 
{ 
    JSONObject json = new JSONObject(); 
    json.put("success", new Boolean(false)); 
    json.put("message", msg); 
    return json.toString(); 
}