2017-05-04 182 views
0

目前我正努力在骆驼CXF-RS端点中设置一个自定义标头。我想设置一个名称为“apps-client”的头文件。此响应标头将由其余端点的使用者使用。如何在CXF-RS Camel中设置自定义响应头?

我尝试了添加DefaultCxfRsBinding类。

<camel:route id="cxf-restful-routes"> 
    <camel:from uri="cxfrs:bean:cxf.restful.endpoint?binding=#CXFRestfulBindings" /> 
    <camel:to uri="direct:postJson" /> 
</camel:route> 

是否有任何其他方式来设置响应头?

感谢您的帮助..!

回答

0

我可以在最终响应中设置自定义标题。我通过在CXFEndpoint中添加outInterceptor来完成。我已添加AbstractPhaseInterceptor。首先,我必须在骆驼路线中设置CamelExchange中的标题。我通过从CamelExchange中读取它,将其设置为#CXFRestfulBindings.populateCxfRsResponseFromExchange()中的CXFExchange。现在,这个头文件将在CXFExchange中可用,并且可以轻松获取。我在我通过扩展AbstractPhaseInterceptor创建的一个拦截器中读取了此标题。比我在PROTOCOL_HEADERS地图中添加了这个标题。

以下是代码片段,

public class OutResponseInterceptor extends AbstractPhaseInterceptor<Message>{ 

    public RestResponseInterceptor(String phase) { 
     super(Phase.MARSHAL); 
    } 

    @Override 
    public void handleMessage(Message message) throws Fault { 
     try { 
      @SuppressWarnings("unchecked") 
      MultivaluedMap<String, Object> headers = (MetadataMap<String, Object>) message.get(Message.PROTOCOL_HEADERS); 

      if (headers == null) { 
       headers = new MetadataMap<String, Object>(); 
      } 

      headers.putSingle("apps-client", (String) message.getExchange().get("apps-client")); 
      message.put(Message.PROTOCOL_HEADERS, headers); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

谢谢你.. !!

0

您是否尝试将此标头添加到Exchange?端点将把它添加到HTTP响应中。

<camel:route id="cxf-restful-routes"> 
    <camel:from uri="cxfrs:bean:cxf.restful.endpoint?binding=#CXFRestfulBindings" /> 
    <camel:setHeader headerName="apps-client"> 
     <constant>Your value here</constant> <!-- or use <simple> language --> 
    </camel:setHeader> 
    <camel:to uri="direct:postJson" /> 
</camel:route> 
+0

不,它没有奏效。根据您的建议,它将设置为CamelExchange,但不在CXFExchange的协议标头中。 –

相关问题