如何使用ApacheCXF运行WS-Notification示例?

如何使用ApacheCXF运行WS-Notification示例?,cxf,ws-notification,Cxf,Ws Notification,我想在ApacheCXF中尝试WS-Notification示例。他们提供的唯一文件是Client.java文件 是不是我只需要编译这个Client.java文件就可以让程序运行?我试过了,但没用 如果没有,我将非常感谢任何人能给我一个循序渐进的指导 下面是WS-Notification示例中Client.java的代码 package demo.client; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QNam

我想在ApacheCXF中尝试WS-Notification示例。他们提供的唯一文件是Client.java文件

是不是我只需要编译这个Client.java文件就可以让程序运行?我试过了,但没用

如果没有,我将非常感谢任何人能给我一个循序渐进的指导

下面是WS-Notification示例中Client.java的代码

package demo.client;

import javax.xml.bind.JAXBElement;
import javax.xml.namespace.QName;

import org.w3c.dom.Element;

import org.apache.cxf.wsn.client.Consumer;
import org.apache.cxf.wsn.client.NotificationBroker;
import org.apache.cxf.wsn.client.Subscription;
import org.oasis_open.docs.wsn.b_2.NotificationMessageHolderType;

/**
 * 
 */
public final class Client {
private Client() {
    //not constructed
}

/**
 * @param args
 */
public static void main(String[] args) throws Exception {
    String wsnPort = "9000";
    if (args.length > 0) {
        wsnPort = args[0];
    }

    // Start a consumer that will listen for notification messages
    // We'll just print the text content out for now.
    Consumer consumer = new Consumer(new Consumer.Callback() {
        public void notify(NotificationMessageHolderType message) {
            Object o = message.getMessage().getAny();
            System.out.println(message.getMessage().getAny());
            if (o instanceof Element) {
                System.out.println(((Element)o).getTextContent());
            }
        }
    }, "http://localhost:9001/MyConsumer");


    // Create a subscription for a Topic on the broker
    NotificationBroker notificationBroker 
        = new NotificationBroker("http://localhost:" + wsnPort + "/wsn/NotificationBroker");
    Subscription subscription = notificationBroker.subscribe(consumer, "MyTopic");


    // Send a notification on the Topic
    notificationBroker.notify("MyTopic", 
                              new JAXBElement<String>(new QName("urn:test:org", "foo"),
                                      String.class, "Hello World!"));

    // Just sleep for a bit to make sure the notification gets delivered
    Thread.sleep(5000);

    // Cleanup and exit
    subscription.unsubscribe();
    consumer.stop();
    System.exit(0);
}

}
包demo.client;
导入javax.xml.bind.JAXBElement;
导入javax.xml.namespace.QName;
导入org.w3c.dom.Element;
导入org.apache.cxf.wsn.client.Consumer;
导入org.apache.cxf.wsn.client.NotificationBroker;
导入org.apache.cxf.wsn.client.Subscription;
导入org.oasis_open.docs.wsn.b_2.NotificationMessageHolderType;
/**
* 
*/
公共最终类客户端{
私人客户(){
//未建造
}
/**
*@param args
*/
公共静态void main(字符串[]args)引发异常{
字符串wsnPort=“9000”;
如果(args.length>0){
wsnPort=args[0];
}
//启动将侦听通知消息的使用者
//我们现在只打印文本内容。
消费者=新消费者(new Consumer.Callback()){
公共无效通知(NotificationMessageHolderType消息){
对象o=message.getMessage().getAny();
System.out.println(message.getMessage().getAny());
if(o元素的实例){
System.out.println(((Element)o.getTextContent());
}
}
}, "http://localhost:9001/MyConsumer");
//为代理上的主题创建订阅
通知经纪人通知经纪人
=新的NotificationBroker(“http://localhost:“+wsnPort+”/wsn/NotificationBroker”);
订阅订阅=notificationBroker.subscribe(消费者,“MyTopic”);
//发送有关该主题的通知
notificationBroker.notify(“MyTopic”,
新的JAXBElement(新的QName(“urn:test:org”,“foo”),
class,“你好,世界!”);
//只需睡一会儿,以确保通知送达
睡眠(5000);
//清理和退出
订阅。取消订阅();
消费者。停止();
系统出口(0);
}
}
错误如下:

Aug 10, 2012 4:52:50 PM org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
INFO: Creating Service {http://client.wsn.cxf.apache.org/}ConsumerService from class org.oasis_open.docs.wsn.bw_2.NotificationConsumer
Aug 10, 2012 4:52:52 PM org.apache.cxf.endpoint.ServerImpl initDestination
INFO: Setting the server's publish address to be http://localhost:9001/MyConsumer
Aug 10, 2012 4:52:52 PM org.eclipse.jetty.server.Server doStart
INFO: jetty-7.5.4.v20111024
Aug 10, 2012 4:52:52 PM org.eclipse.jetty.server.AbstractConnector doStart
INFO: Started SelectChannelConnector@localhost:9001 STARTING
Aug 10, 2012 4:52:52 PM org.eclipse.jetty.server.handler.ContextHandler startContext
INFO: started o.e.j.s.h.ContextHandler{,null}
Aug 10, 2012 4:52:52 PM org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
INFO: Creating Service {http://cxf.apache.org/wsn/jaxws}NotificationBrokerService from WSDL: jar:file:/home/wenbin/Desktop/keith/Apache/apache-cxf-2.6.1/lib/cxf-services-wsn-api-2.6.1.jar!/org/apache/cxf/wsn/wsdl/wsn.wsdl
Aug 10, 2012 4:52:53 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
WARNING: Interceptor for {http://cxf.apache.org/wsn/jaxws}NotificationBrokerService#{http://docs.oasis-open.org/wsn/brw-2}Subscribe has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:532)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:464)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:367)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
    at $Proxy66.subscribe(Unknown Source)
    at org.apache.cxf.wsn.client.NotificationBroker.subscribe(NotificationBroker.java:208)
    at org.apache.cxf.wsn.client.NotificationBroker.subscribe(NotificationBroker.java:162)
    at test.Client.main(Client.java:67)
Caused by: java.net.ConnectException: ConnectException invoking http://localhost:9000/wsn/NotificationBroker: Connection refused
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1457)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1442)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:658)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    ... 11 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
    at java.net.Socket.connect(Socket.java:546)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:173)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:409)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:240)
    at sun.net.www.http.HttpClient.New(HttpClient.java:321)
    at sun.net.www.http.HttpClient.New(HttpClient.java:338)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:935)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:876)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:801)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:979)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1394)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1336)
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42)
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1414)
    ... 14 more
Exception in thread "main" javax.xml.ws.WebServiceException: Could not send Message.
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:145)
    at $Proxy66.subscribe(Unknown Source)
    at org.apache.cxf.wsn.client.NotificationBroker.subscribe(NotificationBroker.java:208)
    at org.apache.cxf.wsn.client.NotificationBroker.subscribe(NotificationBroker.java:162)
    at test.Client.main(Client.java:67)
Caused by: java.net.ConnectException: ConnectException invoking http://localhost:9000/wsn/NotificationBroker: Connection refused
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.mapException(HTTPConduit.java:1457)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1442)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:658)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:532)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:464)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:367)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:320)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
    ... 4 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
    at java.net.Socket.connect(Socket.java:546)
    at sun.net.NetworkClient.doConnect(NetworkClient.java:173)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:409)
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:240)
    at sun.net.www.http.HttpClient.New(HttpClient.java:321)
    at sun.net.www.http.HttpClient.New(HttpClient.java:338)
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:935)
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:876)
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:801)
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:979)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleHeadersTrustCaching(HTTPConduit.java:1394)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1336)
    at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:42)
    at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
    at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1414)
    ... 14 more
2012年8月10日下午4:52:50 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromClass
信息:创建服务{http://client.wsn.cxf.apache.org/}类org.oasis_open.docs.wsn.bw_2.NotificationConsumer中的ConsumerService
2012年8月10日下午4:52:52 org.apache.cxf.endpoint.ServerImpl initDestination
信息:将服务器的发布地址设置为http://localhost:9001/MyConsumer
2012年8月10日下午4:52:52 org.eclipse.jetty.server.server doStart
信息:jetty-7.5.4.v20111024
2012年8月10日下午4:52:52 org.eclipse.jetty.server.AbstractConnector doStart
信息:开始SelectChannelConnector@localhost:9001开始
2012年8月10日下午4:52:52 org.eclipse.jetty.server.handler.ContextHandler startContext
信息:已启动o.e.j.s.h.ContextHandler{,null}
2012年8月10日下午4:52:52 org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL
信息:创建服务{http://cxf.apache.org/wsn/jaxws}来自WSDL:jar:file:/home/wenbin/Desktop/keith/Apache/Apache-cxf-2.6.1/lib/cxf-services-wsn-api-2.6.1.jar的NotificationBrokerService/org/apache/cxf/wsn/wsdl/wsn.wsdl
2012年8月10日下午4:52:53 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
警告:拦截器用于{http://cxf.apache.org/wsn/jaxws}NotificationBrokerService#{http://docs.oasis-open.org/wsn/brw-2}订阅已引发异常,正在解除
org.apache.cxf.interceptor.Fault:无法发送消息。
位于org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderdingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
位于org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
位于org.apache.cxf.endpoint.clientmpl.doInvoke(clientmpl.java:532)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:464)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:367)
位于org.apache.cxf.endpoint.clientmpl.invoke(clientmpl.java:320)
位于org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:89)
位于org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:134)
$Proxy66.订阅(来源未知)
位于org.apache.cxf.wsn.client.NotificationBroker.subscribe(NotificationBroker.java:208)
位于org.apache.cxf.wsn.client.NotificationBroker.subscribe(NotificationBroker.java:162)
位于test.Client.main(Client.java:67)
原因:java.net.ConnectException:ConnectException调用http://localhost:9000/wsn/NotificationBroker: 拒绝连接
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:532)
位于org.apache.cxf.transport.http.httpconductor$WrappedOutputStream.mapException(httpconductor.java:1457)
位于org.apache.cxf.transport.http.httpconductor$WrappedOutputStream.close(httpconductor.java:1442)
位于org.apache.cxf.transport.AbstractConductor.close(AbstractConductor.java:56)
位于org.apache.cxf.transport.http.httpconductor.close(httpconductor.java:658)
位于org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderdingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
... 还有11个
原因:java.net.ConnectException:连接被拒绝
位于java.net.PlainSocketImpl.socketConnect(本机方法)
位于java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
位于java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
在java.net.AbstractPlainSocketImpl.connect(AbstractP
NotificationBroker notificationBroker 
    = new NotificationBroker("http://localhost:" + wsnPort + "/wsn/NotificationBroker");

//these 3 lines are the codes added.
String agu[] = new String[2];       
Service service = new Service(agu);
service.start();

Subscription subscription = notificationBroker.subscribe(consumer, "MyTopic");