mule 基于wsdl调用cxf web service

最近看mule的一个文档mule esb 3 concepts,介绍了mule esb的一些基本概念。看完后,对soa,esb,服务等都有了更深的认识。今天试验通过mule进行cxf web service的调用,试了一下午终于成功。

1,首先要有一个已经发布的cxf web service,可以通过mule studio以图形化的方式简单生成config.xml,再写好相应的component class,就是发布用到的接口和pojo类。

interface

_____________________________

@WebService

public interface IHello {

@WebMethod

public String sayHello(@WebParam (name="name")String name);

}

 

class

_____________________

package test.server;

import javax.jws.WebMethod;

import javax.jws.WebParam;

import javax.jws.WebService;

 

package test.server;

public class Hello implements IHello {

public String sayHello(String name) {

// TODO Auto-generated method stub

System.err.println("name: "+name);

return "Hello, "+name;

}

}

2,用基于wsdl文件的方式调用。

在cxf的bin目录,用wsdl2java生成client,就是下面继承自javax.xml.ws.Service的java类。

wsdl2java命令:wsdl2java -d test -client http://localhost:8081?wsdl

 

生成的client类

————————————————————

package test.server;

 

import java.net.MalformedURLException;

import java.net.URL;

import javax.xml.namespace.QName;

import javax.xml.ws.WebEndpoint;

import javax.xml.ws.WebServiceClient;

import javax.xml.ws.WebServiceFeature;

import javax.xml.ws.Service;

 

/**

 * This class was generated by Apache CXF 2.5.0

 * 2011-12-18T15:35:33.461+08:00

 * Generated source version: 2.5.0

 * 

 */

@WebServiceClient(name = "IHelloService", 

                  wsdlLocation = "http://localhost:8081?wsdl",

                  targetNamespace = "http://server.test/") 

public class IHelloService extends Service {

 

    public final static URL WSDL_LOCATION;

 

    public final static QName SERVICE = new QName("http://server.test/", "IHelloService");

    public final static QName IHelloPort = new QName("http://server.test/", "IHelloPort");

    static {

        URL url = null;

        try {

            url = new URL("http://localhost:8081?wsdl");

        } catch (MalformedURLException e) {

            java.util.logging.Logger.getLogger(IHelloService.class.getName())

                .log(java.util.logging.Level.INFO, 

                     "Can not initialize the default wsdl from {0}", "http://localhost:8081?wsdl");

        }

        WSDL_LOCATION = url;

    }

 

    @WebEndpoint(name = "IHelloPort")

    public IHello getIHelloPort() {

        return super.getPort(IHelloPort, IHello.class);

    }

 

}

3,eclipse+mule ide环境中,创建mule project,将上面的client类copy到project,再新建一个config.xml。然后右键选择运行。

config.xml如下:

 

<?xml version="1.0" encoding="UTF-8"?>

 

<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:http="http://www.mulesoft.org/schema/mule/http"

xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 

http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/current/mule-cxf.xsd 

http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd ">

<flow name="client">

<http:inbound-endpoint exchange-pattern="request-response"//发出http request并等待response

host="localhost" port="8888">//从localhost:8888接收http request。

 

<response>

<object-to-string-transformer />//将响应返回给http transport,在浏览器回显。

</response>

</http:inbound-endpoint>

 

<http:outbound-endpoint exchange-pattern="request-response"//调用webservice并等待返回结果

host="localhost" port="8081">

<cxf:jaxws-client port="IHelloPort" clientClass="test.server.IHelloService"

operation="sayHello" wsdlLocation="http://localhost:8081?wsdl" />

</http:outbound-endpoint>

</flow>

</mule>

 4,运行config.xml.在地址栏输入http://localhost:8888/abc, browser会显示hello,/abc.

hello,/abc 是通过调用web service而得到的返回结果。

时间: 2024-12-02 11:50:45

mule 基于wsdl调用cxf web service的相关文章

MULE 3.4如何调用外部Web Service

问题描述 MULE中调用CXF发布的外部Web Service,报错:org.mule.api.transport.NoReceiverForEndpointException: There is no receiver registered on connector "connector.VM.mule.default" for endpointUri vm://request-response调用不到这个Web Service,不知道是哪里的问题,求大神解答! 下面是MULE配置文

翻译-使用Spring调用SOAP Web Service

原文链接: http://spring.io/guides/gs/consuming-web-service/ 调用SOAP web service 本指南将指导你使用Spring调用一个基于SOAP的web service的整个过程. 指南内容 你将构建一个客户端,使用SOAP用来从远端的基于WSDL的web service获取天气数据.请访问http://wiki.cdyne.com/index.php/CDYNE_Weather进一步获取该天气服务的信息. 该服务根据邮编返回天气预测.你可

java学习:调用 java web service

先写一个java的class:AwbModel(相当于要在web service中传输的实体对象) package webservicesample; public class AwbModel { private String _a1 = "_a1"; public String getA1() { return _a1; } public void setA1(String value) { this._a1 = value; } private String _A2 = &quo

用javascript在客户端调用CRM Web Service

在CRM中,更多的时候我们为了便于部署和提高用户体验都会选择用Javascript在客户端调用Web Service.其实在服务器端开发plugin我们仍然可以达到类似的效果,并且我们可以很方便的处理通过Web Service返回的结果,但用Javascript最主要的好处是很容易部署.众所周知,在CRM里的二次开发大多集中于定制,我们将写的Javascript及在其客户端事件中调用的Javascript方法都可以方便的Export到Customization文件中,这样在部署到生产机器上时我们

Instagram基于Python语言的Web Service效率提升之道

Instagram 目前部署了世界上最大规模的 Django Web 框架(该框架完全使用 Python 编写).我们最初选用 Python 是因为它久负盛名的简洁性与实用性,这非常符合我们的哲学思想--"先做简单的事情".但简洁性也会带来效率方面的折衷.Instagram 的规模在过去两年中已经翻番,并且最近已突破 5 亿用户,所以急需最大程度地提升 web 服务效率以便我们的平台能够继续顺利地扩大.在过去的一年,我们已经将效率计划efficiency program提上日程,并在过

c#调用axis web service出错InvalidOperationException

问题描述 rt!找了很久都不知道什么原因..netclient通过引用http://10.10.71.34/test/wsdl/WSTest.wsdl来调用webservice,调用之后总是抱错.请各位帮帮忙啊.错误信息**************异常文本**************System.InvalidOperationException:响应不是格式正确的XML.--->System.Xml.XmlException:缺少根元素.在System.Xml.XmlTextReaderImp

c#客户端调用java web service的插入对象方法时出现错误客户端发现响应内容类型为“text/html;charset=utf-8”,但应为“tex

问题描述 在javawebservice中发布了一个insertObject(Objecto)的方法,其中传入的o是hibernate中的pojo类在c#客户端调用时出现警告:客户端发现响应内容类型为"text/html;charset=utf-8",但应为"text/xml".请求失败,错误信息为:--<html><head><title>ApacheTomcat/5.5.20-Errorreport</title>

异步调用xml web service

web|xml|异步   using System;using System.Net;using System.IO;using System.Text;using System.Xml;using System.Collections.Specialized;using System.Diagnostics; namespace Technology...{ /**//// <summary> /// Summary description for Main. /// </summar

基于Metro开发的Web service移植到WAS7.0的问题

问题描述 请问论坛里的朋友有没有做过这样的移植啊,我最近在移植过程中遇到了很多问题,我是通过WAS的RationalApplicationDeveloper7.5开发工具将原来Metro平台上的.WAR文件导入工程,然后再将生成的.EAR文件部署到WAS7.0的,但是始终遇到一个问题就是说我的某个类由于某个原因不能被Classloader加载,由于小弟没有原来Metro平台上程序的源代码,所以移植过程相当伤脑筋.请问有过类似经历的朋友不吝赐教!谢谢! 解决方案 解决方案二:RationalApp