2016-04-06 20 views
1

Bu sorunu son iki gün içinde çözmeye çalıştığım apache deve kodumda yaşıyorum ama çözemedim.Camel'deki OnException özel bir yanıt döndürmüyor

İki yol var. İlk rota aşağıdaki gibidir:

public class XXXRoute1 extends RouteBuilder { 
    public void configure() { 
     String endpointUri = "cxf:/XXX; 
     String logEndpoint = "log:" + XXX() + "?level=DEBUG"; 
     from(endpointUri) 
       .to(logEndpoint).to(ROUTE2.ENDPOINT_URI) 
       .to(logEndpoint); 
    } 

İkinci Yol: Benim durumumda,

public class Route2 extends RouteBuilder { 
public void configure() throws Exception{ 
     String integrationEndpoint = "xxx.integration"; 
onException(RuntimeException.class).handled(true).onWhen(exceptionMessage().contains("Invalid")).bean(translator, "translateSomeError(${property.XXX})").end(); 

from(ENDPOINT_URI) 
. 
. 
. so on 

Şimdi onException yoluyla doldurma ediyorum nesneyi (ikinci güzergah, ben onException yoluyla bazı istisna yakalıyorum)

public SomeObjectResponse translateSomeError(Object someObject) throws Exception{ 


     SomeObjectResponse someObjectResponse = new SomeObjectResponse(); 
someObjectResponse.setError("someError"); 

     return someObjectResponse ; 
} 

Ancak SABUN arayüzünde boş bir SABUN zarfının

alıyorum test ederken

Apache deve'de cxf bileşeni kullanıyorum.

+0

CXF'nin ne geri dönmesini bekliyorsunuz? Bir SOAP 'Arızası? Veya 'SomeObjectResponse' örneğiniz vücudun içinde marshalled? – Ralf

+0

Merhaba @Ralf, someobjectResponse'ye dönmek istiyorum. –

+0

Ve 'SomeObjectResponse' JAXB ile sıralanabilir mi? Arabirim modeli sınıflarınızı bir şemadan mı oluşturuyorsunuz? – Ralf

cevap

0

Rotanızı tamamen kaydedebilir misiniz? OnException nerededir?

Ayrıca, özel sınıfınızı kullanmadan önce bunu deneyebilir misiniz? Sadece geri CXF bitiş noktasına yayılır onException ayarlanmış emin bir şey yapmak istiyorum:.

onException (RuntimeException.class) .handled (doğru) .setBody() ("</beklenmeyen özel durum >") basit;

+0

Merhaba Gnanagurus, setBody'yi denedim ama boş bir yanıt verdi. Ayrıca, Onexception'ı routebuilder'ın yapılandırma yönteminin ilk satırı olarak kullanıyorum. –

+0

Öneririm 2 şeyler: 1. doTry kullan 2. Bu aptalca geliyor, ancak rotanızdaki tüm günlük uç noktaları kaldırmayı deneyin ve deneyin. – gnanagurus

0

OnException() bloğu ikinci rotanızda görünüyor ve sonuç olarak ilk rotanızın kapsamında değil.

OnException() genel bloğunu hazırlayın veya kapsam için CXF rotanıza ekleyin.

+0

Merhaba Ninja, Ben zaten ortak bir üst sınıf, MyRouteBuilder yaparak her iki yolu da genişleterek kapsamı küresel yapmaya çalıştım ama ya da yardımcı olmadı. Kapsamı global hale getirmenin başka bir yolu var mı? –

+0

Ortak bir üst sınıf, istisna bloğu global yapmaz, yalnızca iki örneğini oluşturur (her alt sınıf yolu için bir tane). Çalışmakta olan bir şeyi almak için onException() bloğunuzu ve rotalarını tek bir RouteBuilder içinde tanımlamayı deneyin. XML'deki her şeyi tanımlamak onException() global yapmanın daha basit olmasını sağlar ... –

İlgili konular