Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Mule TransformerException:返回类型无效;为变压器“JAXBMarshallertTransformer”指定了[B”类;_Java_Soap_Mule - Fatal编程技术网

Java Mule TransformerException:返回类型无效;为变压器“JAXBMarshallertTransformer”指定了[B”类;

Java Mule TransformerException:返回类型无效;为变压器“JAXBMarshallertTransformer”指定了[B”类;,java,soap,mule,Java,Soap,Mule,我正在使用Mule CXF组件从localhost调用web服务。被调用的web服务返回SoapResult类型的对象,但Mule在转换它时,检测返回类型为“[B”。最后,选择了JAXBMarshallerTransformer,转换失败,此堆栈: org.mule.api.transformer.TransformerException: An invalid return type "class [B" was specified for transformer "JAXBMarshalle

我正在使用Mule CXF组件从localhost调用web服务。被调用的web服务返回SoapResult类型的对象,但Mule在转换它时,检测返回类型为“[B”。最后,选择了JAXBMarshallerTransformer,转换失败,此堆栈:

org.mule.api.transformer.TransformerException: An invalid return type "class [B" was specified for transformer "JAXBMarshallerTransformer"
at org.mule.module.xml.transformer.jaxb.JAXBMarshallerTransformer.doTransform(JAXBMarshallerTransformer.java:119)
at org.mule.transformer.AbstractTransformer.transform(AbstractTransformer.java:420)
at org.mule.DefaultMuleMessage.getPayload(DefaultMuleMessage.java:377)
+ 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
我的骡子流:

<http:listener-config name="HTTP_Listener_Configuration_2" host="0.0.0.0" port="5556" doc:name="HTTP Listener Configuration"/>
<http:request-config name="HTTP_Request_Configuration" host="localhost" port="6543" basePath="ws" doc:name="HTTP Request Configuration"/>
<mulexml:jaxb-context name="JAXB_Context" packageNames="soap.cxf.helloworld" doc:name="JAXB Context"/>
<flow name="helloworldsoapFlow">
    <http:listener config-ref="HTTP_Listener_Configuration_2" path="/hello" doc:name="HTTP"/>
    <set-payload value="#[{&quot;David&quot;,&quot;Rose&quot;}]" doc:name="Set Payload"/>
    <cxf:jaxws-client operation="getHelloWorld" serviceClass="soap.cxf.helloworld.IHelloWorld" doc:name="helloWorldSoap"/>
    <http:request config-ref="HTTP_Request_Configuration" path="hello" method="POST" doc:name="HTTP"/>
    <logger level="INFO" doc:name="Logger" message="#[payload]"/>
</flow>

我的WSDL:

<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://cxfsoapservice.iais.ir/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://cxfsoapservice.iais.ir/" name="HelloWorldService">
<types>
<xsd:schema>
<xsd:import namespace="http://cxfsoapservice.iais.ir/" schemaLocation="http://localhost:6543/ws/hello?xsd=1"/>
</xsd:schema>
</types>
<message name="getHelloWorld">
<part name="name1" type="xsd:string"/>
<part name="name2" type="xsd:string"/>
</message>
<message name="getHelloWorldResponse">
<part name="return" type="tns:soapResult"/>
</message>
<portType name="IHelloWorld">
<operation name="getHelloWorld" parameterOrder="name1 name2">
<input wsam:Action="http://cxfsoapservice.iais.ir/IHelloWorld/getHelloWorldRequest" message="tns:getHelloWorld"/>
<output wsam:Action="http://cxfsoapservice.iais.ir/IHelloWorld/getHelloWorldResponse" message="tns:getHelloWorldResponse"/>
</operation>
</portType>
<binding name="HelloWorldPortBinding" type="tns:IHelloWorld">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="getHelloWorld">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" namespace="http://cxfsoapservice.iais.ir/"/>
</input>
<output>
<soap:body use="literal" namespace="http://cxfsoapservice.iais.ir/"/>
</output>
</operation>
</binding>
<service name="HelloWorldService">
<port name="HelloWorldPort" binding="tns:HelloWorldPortBinding">
<soap:address location="http://localhost:6543/ws/hello"/>
</port>
</service>
</definitions>

我的XSD:

<xs:schema xmlns:tns="http://cxfsoapservice.iais.ir/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://cxfsoapservice.iais.ir/">
<xs:element name="soapResult" type="tns:soapResult"/>
<xs:complexType name="soapResult">
<xs:sequence>
<xs:element name="names" type="xs:string" minOccurs="0"/>
<xs:element name="message" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:schema>

我的骡子流图像:


我找到了答案:调用web服务后,只需在响应标签中添加transformer,如:

 <response>
        <data-mapper:transform config-ref="Pojo_To_XML" doc:name="Pojo To XML"/>
        <logger message="#[payload]" level="INFO" doc:name="Logger"/>
 </response>

新的骡子流将是这样的:

datamapper transformer仅在企业版中可用,您也可以使用
将对象转换为XML。

是的,您是对的。我提到过任何转换器都可以使用,但只能在示例代码中使用data mapper。您需要使用响应范围吗?