2012-04-13 64 views
0

我正在使用Mule Studio创建一个将使用公共Web服务的流程http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL&method=GetCityForecastByZIP。为了实现相同,我创建了以下配置xml。在Mule流中使用基于SOAP的Web服务

<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:\MuleStudio\workspace\transformer\ip" moveToDirectory="D:\MuleStudio\workspace\transformer\processed" 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&amp;method=GetCityForecastByZIP" exchange-pattern="request-response" doc:name="Generic"/> 
    <file:outbound-endpoint path="D:\MuleStudio\workspace\transformer\output" outputPattern="ws-response#[function:dateStamp].xml" doc:name="File"/> 
</flow> 

上运行的骡子Studio中的流动,我得到以下异常:

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; 
    } 
} 

有人能告诉我该如何解决问题吗?

回答

0

documentation of the CXF WSDL connector状态:

的CXF WSDL提供商的一个限制是,它不允许 您使用非Java原语(即不是字符串,整数, 双对象,等等)。

GetCityForecastByZIP返回一个复杂的对象,而不仅仅是一个简单的值,因此您不能使用CXF WSDL连接器与此Web服务交互。请使用CXF JAX-WS client

1

您可以尝试将zip作为输入传递给服务(实际的字符串,例如02111,而不是XML)。