2016-10-13 1 views
1

私は自分のプロジェクトでSpring Integrationを使用しています。私はmultipart/formdata入力パラメータを取る休憩サービスを実行しようとしています。私はint-http:outbound-gatewayを使って休憩サービスを実行しています。以下はコードです:複数のパラメータを取るrestサービスを実行中にHttpMessageConverterが見つかりませんでした

<int:channel id="PQcreateAttachment-Rest-Channel" /> 
    <int:chain input-channel="PQcreateAttachment-Rest-Channel" output-channel="PQcreateAttachment-StoredProcedure-Router" > 

     <int:header-filter header-names="accept-encoding"/>  

     <int:service-activator ref="httpOutboundGatewayHandler" method="buildMultipartHttpOutboundGatewayRequest" /> 

     <int-http:outbound-gateway url-expression="headers.restResourceUrl" 
            http-method-expression="headers.httpMethod" 
            extract-request-payload="true" 
            > 
     </int-http:outbound-gateway> 

     <int:service-activator ref="msgHandler" method="buildMessageFromExtSysResponse" /> 

    </int:chain> 

上記のコードを実行すると、次のエラーが発生します。ここで間違っているものに

public Message<?> buildMultipartHttpOutboundGatewayRequest(Message<?> inMessage) throws Exception{ 

     logger.debug(" ************** buildMultipartHttpOutboundGatewayRequest Start *************************"); 

     String inMsgPayload = (String)inMessage.getPayload(); 



     SOAXml soaXml = parseSOAXml(inMsgPayload); 

     String restURL  = null; 
     String contentType = null; 
     String acceptHdr = null; 
     String userId = null; 
     String password = null; 
     String businessAreaName = null; 
     String typeName = null; 
     String attachmentLocation = null; 
     String httpMethod = null; 
     Message<?> outMessage = null; 
     MessageHeaders inMsgHdrs = null; 
     MessageBuilder<?> msgBuild = null; 

     String authorization = null; 
     //TODO: File location needs to be changed to standard one 
     String fileLocation = "C:\\source.xml"; 
      //if we reach here means, it is AWD system 
      restURL  = getAwdSOAService(soaXml); 

     Document document = XmlParserUtil.convertString2Document(inMsgPayload); 

     userId = XmlParserUtil.getNodeValue(document,"//userId"); 
     password = XmlParserUtil.getNodeValue(document,"//PQcreateAttachment/password"); 
     businessAreaName  = XmlParserUtil.getNodeValue(document,"//businessAreaName"); 
     typeName = XmlParserUtil.getNodeValue(document,"//typeName"); 
     httpMethod = XmlParserUtil.getNodeValue(document,"//METHOD"); 
     attachmentLocation = XmlParserUtil.getNodeValue(document,"//attachmentLocation"); 

     //Construct source xml 
     //Creating document 
      Document sourceDocument = DocumentHelper.createDocument(); 
     Element sourceInstance = sourceDocument.addElement("createSourceInstance"); 
     sourceInstance.addAttribute("xmlns", "http://www.dsttechnologies.com/awd/rest/v1"); 
     Element orderItem=sourceInstance.addElement("businessAreaName"); 
     orderItem.setText("SAMPLEBA"); 
     Element orderItemDesc=sourceInstance.addElement("typeName"); 
     orderItemDesc.setText("SAMPLEST"); 
     // create source xml file 
     XmlParserUtil.createXMLFileUsingDOM4J(sourceDocument, fileLocation); 
     authorization = getBasicAuthorization(userId,password); 

     Resource source = new ClassPathResource(fileLocation); 
     Resource attachment = new ClassPathResource(attachmentLocation); 


     Map<String, Object> multipartMap = new HashMap<String, Object>(); 
     multipartMap.put("source", source); 
     multipartMap.put("attachment", attachment); 
     logger.info("Created multipart request: " + multipartMap); 


      inMessage = buildMessageForMultipart(multipartMap); 


     // contentType = csProps.getHttpAwdContentTypeValue(); 
      acceptHdr = csProps.getHttpAwdAcceptTypeValue() ; 
     // authorization = getBasicAuthorization(soaXml.getUserid(),decriptPassword(soaXml.getPassword())); 

      inMsgHdrs = inMessage.getHeaders(); 
      msgBuild = MessageBuilder.withPayload(inMessage).copyHeaders(inMsgHdrs); 
      msgBuild.removeHeader("Content-Encoding"); 
      msgBuild.removeHeader("accept-encoding"); 
      msgBuild.setHeader(csProps.getHttpUrlHdr(), restURL); 
      msgBuild.setHeader(csProps.getHttpMethodHdr(), httpMethod); 
      msgBuild.setHeader(csProps.getHttpAuthorizatonHdr(),authorization); 
//   msgBuild.setHeader(csProps.getHttpContentTypeHdr(), contentType); 
//   msgBuild.setHeader(csProps.getHttpAcceptTypeHdr(),acceptHdr); 


     outMessage = msgBuild.build(); 

     logger.debug(" ************** buildHttpOutboundGatewayRequest End*************************"); 
     logger.debug(outMessage); 
     logger.debug(" ************************************************************************"); 

     return outMessage; 

    } 

任意のアイデア:

Caused by: org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.integration.message.GenericMessage] and content type [application/x-java-serialized-object] 
    at org.springframework.web.client.RestTemplate$HttpEntityRequestCallback.doWithRequest(RestTemplate.java:665) 
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:481) 
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:460) 
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:409) 
    at org.springframework.integration.http.outbound.HttpRequestExecutingMessageHandler.handleRequestMessage(HttpRequestExecutingMessageHandler.java:372) 
    ... 121 more 

ここに私のマルチパートリクエストを準備するJavaコードはありますか?

+0

あなたの 'buildMultipartHttpOutboundGatewayRequest'が返すものは –

+0

です。タイプ' org.springframework.integration.Message 'のメッセージを返します。どんな手がかりですか?追加情報が必要な場合はお知らせください。 –

+0

その後、そのメソッドのコードを共有してください。あなたはマルチパートについて話しているので、シリアルには使えない部分があります。メッセージのいくつかのヘッダー。それはメッセージ全体が非直列化可能になる方法です。とにかくあなたがメッセージオブジェクトをサービスして休憩するために送るつもりであると奇妙に見える –

答えて

1

問題は、あるメッセージを別のメッセージにラップするためです。

buildMessageForMultipart(multipartMap);は何ですか?

ペイロードとしての単純なマップとそれらのヘッダーで十分でしょう。

1つのメッセージを別のメッセージにラップするポイントがわかりません。

+0

スーパー!あなたは正しいです。あるメッセージを別のメッセージにラッピングすることが、ここでの犯人です。 +1をすばやく指摘してください。 –

関連する問題