2014-10-29 67 views
0

从这个网址 想在上面的代码中提取PDF名获取PathVariable使用Spring集成

localhost:port/server/InboundGateway/pdf/
<int-http:inbound-gateway id="InboundGateway" 
    request-channel="request" reply-channel="response" supported-methods="GET,POST" 
    request-payload-type="java.lang.String" path="/InboundGateway/{type}" 
    <int-http:header name="type" expression="#pathVariables.type" /> 
</int-http:inbound-gateway> 

(INT-HTTP:头名= “类型”)类型将PDF 但如何以提取其在Java代码中值我不能够得到HttpServletRequest的

我是支持的,方法的基础路由

<int:router input-channel="request" expression="headers.http_requestMethod"> 
    <int:mapping value="POST" channel="contentDownload" /> 
</int:router> 

<int:service-activator input-channel="contentDownload" 
    method="extract" ref="downloadPayloadExtractor" output-channel="contentRouter"></int:service-activator> 

在DownloadPayloadExtractor我想要得到的PathVariable

这些日志的

SEVERE: Servlet.service() for servlet [InboundGateway] in context with path [/mgl-crm-server] threw exception 

org.springframework.integration.MessageHandlingException:java.lang.IllegalArgumentException异常:所需的头不可用:在组织型 。 springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java:76) at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:64) at org.springframework .integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:98) 在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78) 在org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher的.java:110) 在org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97) 在org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:61) 在org.springframework .integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:157) at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:128) 在org.springframework.integration.core.MessagingTemplate.doSend(MessagingTemplate.java:288) 在org.springframework.integration.core.MessagingTemplate.send(MessagingTemplate.java:149) 在org.springframework.integration.router。 AbstractMessageRouter.handleMessageInternal(AbstractMessageRouter.java:220) 在org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:78) 在org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:110) 在org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:97) 在org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:61) 在org.springframe在org.springframework.integration.core.MessagingTemplate.doSendAndReceive(org.springframework.integration.core.MessagingTemplate.doSend(MessagingTemplate.java:288) ) MessagingTemplate.java:318) 在org.springframework.integration.core.MessagingTemplate.sendAndReceive(MessagingTemplate.java:239) 在org.springframework.integration.gateway.MessagingGatewaySupport.doSendAndReceive(MessagingGatewaySupport.java:233) 的组织。 springframework.integration.gateway.MessagingGatewaySupport.sendAndReceiveMessage(MessagingGatewaySupport.java:207) at org.springframework.integration.http.inbound.HttpRequestHandlingEndpointSupport.doHandleRequest(HttpRequestHandlingEndpointSupport。的java:271) 在org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway.handleRequest(HttpRequestHandlingMessagingGateway.java:95) 在org.springframework.web.context.support.HttpRequestHandlerServlet.service(HttpRequestHandlerServlet.java:67) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) at org.apache.catalina.core.ApplicationFilterChain.doFilter( ApplicationFilterChain.java:208) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 的组织。 apache.catalina.authenticator.Au在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)上的org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在org.apache.catalina.connector。 CoyoteAdapter.service(CoyoteAdapter.java:408) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:314) at java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908) at org.apache.tomcat.util。 Threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:662) 引起:java.lang.IllegalArgumentException:必需的标头不可用:在组织中键入 。 springframework.util.Assert.isTrue(Assert.java:65) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl .invoke(DelegatingMethodAccessorImpl.java:25) at j ava.lang.reflect.Method.invoke(Method.java:597) at org.springframework.expression.spel.support.ReflectiveMethodExecutor.execute(ReflectiveMethodExecutor.java:58) at org.springframework.expression.spel.ast。 MethodReference.getValueInternal(MethodReference.java:104) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57) at org.springframework.expression.spel.ast.Ternary.getValueInternal(Ternary。 java:55) at org.springframework.expression.spel.ast.MethodReference.getValueInternal(MethodReference.java:60) at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57) at org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue(SpelNodeImpl.java:102) 在org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:102) 在org.springframework.integration.util.AbstractExpressionEvaluator.evaluateExpression(AbstractExpressionEvaluator.java:126) 在org.springframework.integration。 util.MessagingMethodInvokerHelper.processInternal(MessagingMethodInvokerHelper.java:225) 在org.springframework.integration.util.MessagingMethodInvokerHelper.process(MessagingMethodInvokerHelper.java:125) 在org.springframework.integration.handler.MethodInvokingMessageProcessor.processMessage(MethodInvokingMessageProcessor.java: 73) ...42更多

回答

0

由于Framewrok得到处理Message<?>,你真的正确的方式来填充PathVariableMessageHeaders

改进代码的唯一一件事情就是关于如何访问该头文件的问题。那么,你的POJO方法应该像这样改进:

public Object extract(Object payload, @Header("type") String type) { 
.... 
} 

而就是这样。

查看更多的信息在Reference Manual

UPDATE

required header not available: type

好,添加到您的配置:

<wire-tap channel="logging"> 

<logging-channel-adapter id="logging" log-full-message="true" level="ERROR"/> 

,并将日志收到请求后,直到该例外分享在这里。

+0

给出错误: - 需要的标题不可用:类型 – user3194123 2014-10-29 10:38:48

+0

添加了一些配置到我的答案。 – 2014-10-29 10:59:16