Jersey/JettyベースのサーバーでXML用のデフォルトのJAXB MessageBodyWriterを使用できないようです。私はこのエラーを取得しています:デフォルトのJersey JAXB MessageBodyWriterをカスタムプロバイダと混在したXMLに使用するには?
MessageBodyWriter not found for media type=application/xml, type=...
私はこのようになりApplicationクラスを持っている:
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
import cmb.agent.engine.resource.AgentCertificateResource;
import cmb.agent.engine.resource.ProfileResource;
import cmb.agent.engine.servlet.SessionRequestFilter;
@ApplicationPath("/")
public class AgentExample extends Application {
private Set<Object> singletons = new HashSet<Object>();
private Set<Class<?>> perRequestServices = new HashSet<>();
public AgentExample() {
perRequestServices.add(ProfileResource.class);
perRequestServices.add(AgentCertificateResource.class);
singletons.add(new NotificationXmlMarshaller());
singletons.add(new SessionRequestFilter());
}
@Override
public Set<Class<?>> getClasses() {
return perRequestServices;
}
@Override
public Set<Object> getSingletons() {
return singletons;
}
}
上記の例ではNotificationXmlMarshallerは私のカスタムマーシャラーの一つですが、しようとするとエラーが発生します他のエンティティタイプをマーシャリングします。
私が理解していることは、getClasses()とgetSingletons()が空でない値を返すと、すべてのデフォルトが無視されることです。だから私は、デフォルトのJAXB xmlマーシャラを無効にしていると仮定します。
私の独自のカスタムマーシャラーを使用するにはどうすればよいですか?他のすべてにデフォルトのJAXBマーシャーを使用するにはどうすればよいですか?
compile("org.glassfish.jersey.containers:jersey-container-servlet:$jerseyGlassfishVersion")
compile("org.glassfish.jersey.media:jersey-media-jaxb:$jerseyGlassfishVersion")
compile("org.glassfish.jersey.core:jersey-client:$jerseyGlassfishVersion")
ジャージーバージョン2.25:ここ
は、このプロジェクトのためのジャージのための私のGradleの依存関係です。