我正在使用Mule Studio创建一个将使用公共Web服务 http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL&method=GetCityForecastByZIP 的流。为了实现相同的目标,我创建了以下配置 xml。
<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="CE-3.2.1" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd
http://www.mulesoft.org/schema/mule/file http://www.mulesoft.org/schema/mule/file/current/mule-file.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">
<spring:beans>
<spring:bean id="Bean" name="Bean" class="javax.xml.bind.JAXBContext" factory-method="newInstance" doc:name="myJAXBCtx">
<spring:constructor-arg value="com.practice.data"/>
</spring:bean>
</spring:beans>
<flow name="webservice" doc:name="webservice">
<file:inbound-endpoint path="D:MuleStudioworkspacetransformerip" moveToDirectory="D:MuleStudioworkspacetransformerprocessed" doc:name="Input Request File">
<file:filename-regex-filter pattern="^.*ws.(xml)$" caseSensitive="true"/>
</file:inbound-endpoint>
<mulexml:xml-to-object-transformer returnClass="com.practice.data.GetCityForecastByZIP" doc:name="XML to Object">
<mulexml:alias name="GetCityForecastByZIP" class="com.practice.data.GetCityForecastByZIP"/>
</mulexml:xml-to-object-transformer>
<outbound-endpoint address="wsdl-cxf:http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL&method=GetCityForecastByZIP" exchange-pattern="request-response" doc:name="Generic"/>
<file:outbound-endpoint path="D:MuleStudioworkspacetransformeroutput" outputPattern="ws-response#[function:dateStamp].xml" doc:name="File"/>
</flow>
在骡子工作室中运行流程时,我收到以下异常:
org.apache.cxf.interceptor.Fault: Marshalling Error: class com.practice.data.GetCityForecastByZIP nor any of its super class is known to this context.
我已经为GetCityForecastByZIP提供了正确的注释。参考下面的代码:
package com.practice.data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement(name="GetCityForecastByZIP",namespace="http://ws.cdyne.com/WeatherWS/")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"zip"})
public class GetCityForecastByZIP {
@XmlElement(name="ZIP",required = true)
private String zip = null;
public GetCityForecastByZIP() {
}
public String getZip() {
return zip;
}
public void setZip(String zip) {
this.zip = zip;
}
}
有人可以告诉我应该如何纠正问题吗?
您可以尝试将 zip 作为输入传递给服务(例如实际字符串,即 02111 而不是 XML)。
CXF WSDL 连接器的文档指出:
CXF WSDL 提供程序的一个限制是它不允许 使用非 Java 原语(不是字符串、int、 双倍,依此类推)。
GetCityForecastByZIP 返回一个复杂对象,而不仅仅是一个简单的值,因此不能使用 CXF WSDL 连接器与此 Web 服务进行交互。
请改用 CXF JAX-WS 客户端。
你能尝试使用Mule Web服务消费者组件:- <ws:consumer-config/>
吗?
这是参考:- https://developer.mulesoft.com/docs/display/current/Web+Service+Consumer