我有一个XmlAdapter来将类中的关联对象封送到各自的REST URI:
public class AirportAdapter extends XmlAdapter<URI, Airport> {
@Override
public URI marshal(Airport airport) throws Exception {
return UriBuilder.fromResource(AirportsResource.class).path(AirportsResource.class,
"getAirportResource").build(airport.getId());
}
然而,这会产生一个相对URL( / Airports / 1 ),它无法将URI解组为Airport
对象(显然):
@Override
public Airport unmarshal(URI uri) throws Exception {
// Does work, but not desirable
return JAXB.unmarshal("http://localhost/resources" + uri, Airport.class)
// Does not work
return JAXB.unmarshal(uri, Airport.class);
}
}
我需要UriBuilder
来构建一个绝对路径( http:// localhost / resources / airports / 1 ),我知道我可以使用UriInfo
来做到这一点class,但我不能将它注入适配器,因为它不是资源。当我使用协议,主机和资源路径预先添加URI时,解组确实有效。有什么方法可以让UriBuilder建立一个绝对的路径,而不是自己预先发布它?
更新
我想我是否自己创建了一个JAXB上下文:
JAXBContext jc = JAXBContext.newInstance( "com.acme.foo:com.acme.bar" );
Unmarshaller u = jc.createUnmarshaller();
并在我自己的unmarshaller上设置适配器,传递实体管理器从数据库中获取正确的对象,而不是通过URI获取umarshalling,这些也可以由框架使用,或者自己创建新的实例,渲染这个接近静音?
答案 0 :(得分:1)
如果您在XmlAdapter
/ Marshaller
上设置Unmarshaller
的实例,那么XmlAdapter
的该实例将在所有已注释{{{}}的地方使用{1}}使用该类。
在泽西岛等JAX-RS环境中,您可以使用@XmlJavaTypeAdapter
/ MessageBodyReader
进行设置。