2013-04-24 107 views
2

我有一个JAX-RS Web服务,它看起来像这样:返回XML对象

@Path("/status") 
@Produces("application/xml") 
@GET 
public PrecisionStatus getPrecisionValue(){ 
    PrecisionStatus status = ... 

    return status; 
} 

最初,结果是:

<PrecisionStatus sensorID="TemperatureSensor5"><condition>OK</condition><fieldValue>60.0</fieldValue></PrecisionStatus> 

它看起来不错,但我想声明描述这个文档的xsd文件。通过使用JAXB编组特征,我能够产生(在记录器/控制台)所需的输出:

<PrecisionStatus sensorID="TemperatureSensor5" xsi:noNamespaceSchemaLocation="http://mysite.com/myapp/xsd0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <condition>OK</condition> 
    <fieldValue>60.0</fieldValue> 
</PrecisionStatus> 

(这是由解编对象确认)。

但是,如果我返回这个对象return status;,浏览器会接收到前一个xml文档,即没有引用xsd的文档。

我非常肯定,该对象有正确的形式,但有点对最终结果的xsd的引用被剥夺。任何线索?

回答

2

您可以创建一个JAX-RS MessageBodyWriter访问Marshaller以设置JAXB_NO_NAMESPACE_SCHEMA_LOCATION属性。对于一个完整的示例,请参阅: