2017-06-06 2 views
2

ich Apache Camel und Jboss Sicherung verwende, habe ich eine Probe Route blau drucken unten inwie maßgeschneiderte Antwort auf Ausnahme zurück in Apache Kamel

<?xml version="1.0" encoding="UTF-8"?> 
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" 
    xmlns:camel="http://camel.apache.org/schema/blueprint" 
    xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd  http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> 
    <cxf:rsServer address="/testservice" id="testserver" serviceClass="com.company.HelloBean"> 
    <camelContext id="testContext" trace="false" xmlns="http://camel.apache.org/schema/blueprint"> 
     <route id="testRoute" > 
      <from id="_from1" uri="cxfrs:bean:testserver"/> 
       <bean beanType="com.company.HelloBean" 
        id="_bean1" method="hello"/> 
     </route> 
    </camelContext> 
</blueprint> 

und Java-Klasse aufgelistet erstellt, die es

@Path("/testservicenew") 
public class HelloBean { 


    @POST 
    @Path("/test") 
    @Produces(MediaType.APPLICATION_JSON) 
    @Consumes(MediaType.APPLICATION_JSON) 
    public String hello(Person name) { 

     return "Hello:"+name.getName(); 
    }  
} 
implementiert

aber wenn ich falsch JSON senden gibt es schlechte Anfrage, ich einige benutzerdefinierte Interceptor so kann ich die die zurückgegebene Antwort mit meinem Körper angepasst und Kopf steuern

Antwort

1

Sie können eine Definition Benutzerdefinierte s Exception Handler als

@Provider 
public class ExceptionHandler implements ExceptionMapper<Throwable> { 
    @Override 
    public Response toResponse(Throwable exception) { 

     System.out.println("Exception type:" + exception.getClass().getCanonicalName()); 

     exception.printStackTrace(); 
     if (exception instanceof BadRequestException) { 

      return Response.status(Response.Status.BAD_REQUEST) 
        .header("unexpected request data", "BadRequestExceptiont").build(); 

     } 


     return Response.status(Response.Status.REQUEST_TIMEOUT).header("Problemo", "yes problemo").build(); 
    } 

} 

und Sie können es in Ihrer Route definieren diese Klasse zu verwenden

<?xml version="1.0" encoding="UTF-8"?> 
    <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" 
     xmlns:camel="http://camel.apache.org/schema/blueprint" 
     xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd  http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> 
     <cxf:rsServer address="/testservice" id="testserver" serviceClass="com.company.HelloBean"> 
    <cxf:providers> 
      <bean class="com.company.ExceptionHandler" id="securityException"/> 
     </cxf:providers> 
    </cxf:rsServer> 
     <camelContext id="testContext" trace="false" xmlns="http://camel.apache.org/schema/blueprint"> 
      <route id="testRoute" > 
       <from id="_from1" uri="cxfrs:bean:testserver"/> 
        <bean beanType="com.company.HelloBean" 
         id="_bean1" method="hello"/> 
      </route> 
     </camelContext> 
    </blueprint> 
+0

weiter zu fragen, fühlen Sie sich frei, wenn es funktioniert nicht löscht i kompiliert haben, nur kopiert es von meinem älteren Projekten –

+0

danke ich verstehe –

Verwandte Themen