0

我需要通过 HTTP POST 传输 XML 文件。可以配置 Mule 来执行此操作。我一直在尝试使用简单的入站文件 --> 出站 HTTP,但它不起作用。有没有人有这方面的经验?

    <flow name="rpg_uploadFlow1" doc:name="rpg_uploadFlow1">
    <file:inbound-endpoint path="C:\Users\Claes\Documents\CD-utveckling\paper-rpg\OUT" moveToDirectory="C:\Users\Claes\Documents\CD-utveckling\paper-rpg\sent" responseTimeout="10000" mimeType="text/xml" doc:name="File"/>
    <http:outbound-endpoint exchange-pattern="one-way" host="http://XXXXXXXXXXX.ashx?SystemName=XXXX&amp;UserName=XXXX&amp;PassWord=XXXXX" port="80" disableTransportTransformer="true" doc:name="HTTP"/>

</flow>

错误;

ERROR 2013-05-17 17:24:49,208 [[rpg_upload].connector.http.mule.default.dispatcher.07]    org.mule.exception.DefaultMessagingExceptionStrategy: 

Message               : Failed to route event via endpoint:   DefaultOutboundEndpoint{endpointUri=http://http://xxxxxxxxxxxxxxxx/rpgtest/service.ashx?  SystemName=xxxxxxxxxxxxxxxxx&UserName=xxxxxxxxxxxxxxx&PassWord=xxxxxxx,  connector=HttpConnector
{
   name=connector.http.mule.default
  lifecycle=start
  this=18b44ce0
   numberOfConcurrentTransactedReceivers=4
   createMultipleTransactedReceivers=true
   connected=true
   supportedProtocols=[http]
   serviceOverrides=<none>
 }
 ,       name='endpoint.http.http.xxxxxxxxxxxxxxxx.service.ashx.SystemName.xxxxx.UserName.xxxxx.Pass       Word.836749.80', mep=ONE_WAY, properties={PassWord=836749:80, SystemName=xxxxxx,      UserName=xxxxxxxxx}, transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0}, deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000, endpointEncoding=UTF-8, disableTransportTransformer=true}. Message payload is of type: ReceiverFileInputStream
    Code                  : MULE_ERROR-42999
 --------------------------------------------------------------------------------
 Exception stack is:
 1. http (java.net.UnknownHostException)
  java.net.AbstractPlainSocketImpl:-1 (null)
 2. Failed to route event via endpoint:   DefaultOutboundEndpoint{endpointUri=http://http://xxxxxxxxxx.ashx?   SystemName=xxxxxxxxxxxx&UserName=xxxxxx&PassWord=836749:80, connector=HttpConnector
 {
   name=connector.http.mule.default
   lifecycle=start
   this=18b44ce0       
   numberOfConcurrentTransactedReceivers=4
  createMultipleTransactedReceivers=true
   connected=true
  supportedProtocols=[http]
  serviceOverrides=<none>
      }
    ,        name='endpoint.http.http.xxxx.ashx.SystemName.xxxxxxxx.UserName.xxxxx.PassWord.836749.80',     mep=ONE_WAY, properties={PassWord=836749:80, SystemName=xxxxxxxxxx, UserName=xxxx},    transactionConfig=Transaction{factory=null, action=INDIFFERENT, timeout=0},    deleteUnacceptedMessages=false, initialState=started, responseTimeout=10000,    endpointEncoding=UTF-8, disableTransportTransformer=true}. Message payload is of type:    ReceiverFileInputStream (org.mule.api.transport.DispatchException)
       org.mule.transport.http.HttpClientMessageDispatcher:155    (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/transport/DispatchExceptio n.html)
      --------------------------------------------------------------------------------
      Root Exception stack trace:
      java.net.UnknownHostException: http
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
at   java.net.SocksSocketImpl.connect(Unknown Source)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

4

3 回答 3

1

You can use a mule byte array to string transformer to make your request as string and then post it to your http outbound.

<flow name="rpg_uploadFlow1" doc:name="rpg_uploadFlow1">
    <file:inbound-endpoint path="C:\Users\Claes\Documents\CD-utveckling\paper-rpg\OUT" moveToDirectory="C:\Users\Claes\Documents\CD-utveckling\paper-rpg\sent" responseTimeout="10000" mimeType="text/xml" doc:name="File"/>

    <byte-array-to-string-transformer></byte-array-to-string-transformer>
  .....

Coming to your error. I gues it is not related to mule tags and endpoints. It is something in accessing the url you are trying.

See the below post for the issue related to UnknownHostException.

java.net.UnknownHostException when accessing a URL

于 2013-05-17T15:50:37.970 回答
1

我在文件端点的某些地方遇到了麻烦,因为它通过文件阅读器作为有效负载而不是实际文本传递。尝试添加一个文件到字符串的转换器:

<flow name="rpg_uploadFlow1" doc:name="rpg_uploadFlow1">
    <file:inbound-endpoint path="C:\Users\Claes\Documents\CD-utveckling\paper-rpg\OUT" moveToDirectory="C:\Users\Claes\Documents\CD-utveckling\paper-rpg\sent" responseTimeout="10000" mimeType="text/xml" doc:name="File"/>
    <file:file-to-string-transformer doc:name="File to String"/>
    <http:outbound-endpoint exchange-pattern="one-way" host="http://XXXXXXXXXXX.ashx?SystemName=XXXX&amp;UserName=XXXX&amp;PassWord=XXXXX" port="80" disableTransportTransformer="true" doc:name="HTTP"/>
</flow>
于 2013-05-17T15:33:58.417 回答
0

试试这个:您可以使用 mule 字节数组到字符串转换器,将您请求的文件作为字符串,然后使用 SetPayload 或附件连接器并将其发布到您的 http 出站。

于 2017-08-23T04:29:05.353 回答