2012-04-13 63 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)。