gpt4 book ai didi

java - 如何使用 XML 类型进行 POST 并在 Camel 中获得 java.lang.String 形式的答案?

转载 作者:太空宇宙 更新时间:2023-11-04 12:55:22 25 4
gpt4 key购买 nike

我正在尝试制作一些小型消息转换器,将新型数据注入(inject)现有系统。为此,我将新的 XML 转换为内部类,执行操作,并将结果作为字符串返回。当我将答案部署为 XML 时没有问题,但目前我收到以下错误:

java.io.IOException: org.apache.camel.InvalidPayloadException: No body available of type: javax.xml.bind.JAXBElement but has value: 00 of type: java.lang.String on: Message: 00. Exchange[ID-60345-1455623194156-43-5][Message: 00]

我尝试替换生成类型、outType,通过将 Content-Type 设置为 text/plain 来调整标题,但这没有帮助。原来的绑定(bind)模式是XML。我的目标是使用 POST 方法返回简单的字符串。

<restConfiguration component="netty4-http" 
bindingMode="auto"
contextPath="/WebServices/rest"
enableCORS="true">
<endpointProperty key="nettySharedHttpServer" value="#sharedNettyHttpServer"/>
<dataFormatProperty key="prettyPrint" value="false"/>
</restConfiguration>

<!-- defines the rest services using the context-path /user -->
<rest path="/service"
consumes="application/xml"
produces="text/plain">
<description>REST service</description>

<post uri="/request"
type="org.company.generated.VmML"
outType="java.lang.String">

<route>
<to uri="bean:authenticationBean?method=checkAuthentication"/>
<bean ref="messageTranslator" method="vmmlToEntry"/>
<to uri="bean:Service?method=store"/>
<bean ref="messageTranslator" method="returnEntryToStringReplay"/>
</route>
</post>
</rest>

最佳答案

我无法让我的示例与 bindingMode="auto"一起使用,因此我无法验证这是否真的是问题所在,但这对我有用:

<camelContext id="rest-test" allowUseOriginalMessage="false" xmlns="http://camel.apache.org/schema/blueprint" streamCache="false">
<dataFormats>
<jaxb id="jaxb" prettyPrint="false" contextPath="my.domain.classes" />
</dataFormats>

<restConfiguration component="jetty" scheme="http" host="0.0.0.0" port="9001" contextPath="/string/conversion" bindingMode="off" />

<rest path="/test" id="rest-string-conversion" produces="text/plain" consumes="application/xml">
<post>
<route>
<camel:unmarshal ref="jaxb"/>
<camel:transform>
<camel:simple>${body.eventId}</camel:simple>
</camel:transform>
<log message="Event ID: ${body}" loggingLevel="INFO" logName="string-conversion-test" />
</route>
</post>
</rest>
</camelContext>

响应是一个字符串,其中包含我从路由中收到的 Event 对象中提取的事件 ID。但是,响应的 Content-Type header 被错误地设置为 application/xml 而不是 text/plain:

200 OK
Content-Type: application/xml
[..]
Transfer-Encoding: chunked
Server: Jetty(9.2.10.v20150310)

d9870180-257a-11e5-b345-feff819cdc9f

可能您的响应实际上包含一个字符串,但您的客户端对 Content-Type header 感到困惑?

关于java - 如何使用 XML 类型进行 POST 并在 Camel 中获得 java.lang.String 形式的答案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35432810/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com