2017-02-24 19 views
0

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の依存関係です。

答えて

0

私は最終的に私のエンティティクラスに大きな誤りがあることを知った。 @XmlRootElementアノテーションを忘れてしまった。一口。 :(

関連する問題