2010-03-08 11 views
6

döndürür. İlkbahardasonrası xml xml içerikli bir "yazı" destekleyen basit bir yay bazlı webservice oluşturmaya çalışıyorum Desteklenmeyen Ortam Türü

, ben bir AnnotationMethodHandler tanımlayın:

<bean id="inboundMessageAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> 
     <property name="messageConverters"> 
      <util:list> 
       <bean class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter"> 
        <property name="marshaller" ref="xmlMarshaller"/> 
        <property name="unmarshaller" ref="xmlMarshaller"/> 
       </bean> 
      </util:list> 
     </property> 
    </bean> 

Ve JAXB tabanlı xml diziciyi:

<bean id="xmlMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller"> 
     <property name="contextPaths"> 
      <array> 
       <value>com.company.schema</value> 
      </array> 
     </property> 
     <property name="schemas"> 
      <array> 
       <value>classpath:core.xsd</value> 
      </array> 
     </property> 
    </bean> 

My kontrolör "Kaynak" JAXB tarafından otomatik bir sınıf olduğu, aşağıdaki gibi açıklamalı :

@RequestMapping(method = POST, value = "/resource") 
    public Resource createResource(@RequestBody Resource resource) { 
     // do work 
    } 

WebService çağrısı sonucu her zaman "HTTP/1.1 415 Desteklenmeyen Med ia Türü ". İşte bir örnek hizmet çağrısıdır:

HttpPost post = new HttpPost(uri); 
post.addHeader("Accept", "application/xml"); 
post.addHeader("Content-Type", "application/xml"); 

StringEntity entity = new StringEntity(request, "UTF-8"); 
entity.setContentType("application/xml"); 
post.setEntity(entity); 

Ben her yerde mümkün doğru ortam türünü kuruyorum geliyor bana. Herkesin bir fikri var mı?

Düzenleme: o kadar uzak nesneyi unmarshal çalışmak gibi geçmez sanki daha da ayıklama sonra görünüyor. Oldukça AnnotationMethodHandler tipi uygulama/xml şey MarshallingHttpConverter gitmek gerektiğini bilir nasıl arkasında kara büyü anlamıyorum. Bu konuda herhangi bir ışık tutabilir mi?

cevap

5

en olası nedeni JAXB bağlam bir Resource nesneye unmarshal bilmiyor olmasıdır.

Resource bir @XMLRootElement ek açıklaması var mıdır? Değilse, Jaxb2Marshaller parametreyi kabul etmez ve 415 hatası alırsınız. Bu, Sprng'den JAXB çalışma zamanına yapılan delegasyon tarafından yapıldı, Spring konuyla ilgili gerçekten çok şey söylemiyor.

düzenlemek: @RequestBody parametre HandlerMethodInvoker.resolveRequestBody() yapılır edilecek veri fiili dayatması. MIME türü ve parametre sınıfı türünün eşleştirilmesi de dahil olmak üzere, eşleşme yapılmadan önce yerine getirilmesi gereken çok sayıda koşul vardır ve başarısız olursa, günlüğe kaydetme yok, yalnızca HTTP 415. Bu yöntemin kaynağına bir göz atın. ve daha iyisi, kurulumunuz için mantığın nerede başarısız olduğunu görmek için bazı uzaktan hata ayıklama işlemleri yapın. öneri, skaffman için

+0

teşekkürler. Kontrol ederim ve sınıfın gerçekten bir @XMLRootElement etiketi var. –

+0

@Mayra: Ve 'Kaynak '' com.company.schema' paketindedir? Yaptığınız yapılandırmayla 'Jaxb2Marshaller' ı oluşturan bir birim testi yazmayı deneyin ve 'support' (Resource.class)' 'true' döndürdüğünden emin olun. Daha fazla almadan önce çalışması gerekiyor. – skaffman

+0

Zar yok, bir Jaxb2Marshaller nesnesi oluşturdum, ilk dosyada olduğu gibi contextPath ve şemayı ayarladım ve sınıfımı desteklediğini söylüyor. –

İlgili konular