Web Services 在Mule流中使用基于SOAP的Web服务

t98cgbkg  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(272)

我正在使用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:\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>

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

谁能告诉我该如何纠正该问题?

pgky5nke

pgky5nke1#

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

bt1cpqcv

bt1cpqcv2#

CXF WSDL连接器的文档说明:
CXF WSDL提供程序的一个限制是它不允许使用非Java原语(不是String、int、double等的对象)。
GetCityForecastByZIP返回一个复杂的对象,而不仅仅是一个简单的值,因此您不能使用CXF WSDL连接器与此Web服务交互。
请改用CXF JAX-WS client

4nkexdtk

4nkexdtk3#

您是否可以尝试使用Mule Web服务使用者组件:-<ws:consumer-config/>
下面是引用:-https://developer.mulesoft.com/docs/display/current/Web+Service+Consumer

相关问题