2011-04-05 68 views
0

有人可以在下面的代码中填写缺少的链接吗?调用Web服务。需要缺少的链接

第一种方式:

Web服务接口文件是HappyService。

JaxWSProxyFactoryBean factory = new JaxWsProxyFactoryBean(); 

factory.getInterceptors().add(new LoggingInInterceptor()); 
factory.getInterceptors().add(new LoggingOutInterceptor()); 

//MISSING LINK. Where does HappyService.class come from? I don't have it 
factory.setServiceClass(HappyService.class); 

factory.setAddress("http://......../happyService"); 

//Again how do I get HappyService? 
HappyService client = (HappyService) factory.create(); 

方式二:

String UrlString = "Your WSDL URL"; 
    String nameSpaceUri = "urn:Foo"; 
    String serviceName = "MyHelloService"; 
    String portName = "HelloIFPort"; 

    URL helloWsdlUrl = new URL(UrlString); 

    ServiceFactory serviceFactory = ServiceFactory.newInstance(); 

    Service helloService = 
      serviceFactory.createService(helloWsdlUrl, 
      new QName(nameSpaceUri, serviceName)); 

    //Where did dynamicproxy.HelloIF come from? This code won't compile as that file does not exist anywhere 
    dynamicproxy.HelloIF myProxy = 
      (dynamicproxy.HelloIF) 
      helloService.getPort(
      new QName(nameSpaceUri, portName), 
      dynamicproxy.HelloIF.class); 

     System.out.println(myProxy.sayHello("Buzz")); 

任何人有一个线索,在那里这些接口类的来源以及是如何生成的,请让我知道。它看起来像我可以做一个Web服务调用的唯一方法是手动编写SOAP请求,我真的不想这样做,因为它可能会变得非常大和容易出错。

+0

你使用Web服务框架?基于第一个例子,我认为你使用CXF。 HappyService类必须是由CXF提供的wsdl2java任务生成的类。你没有生成的类包吗? – reef 2011-04-05 15:51:15

+0

我注意到你的其他问题看起来像是这个版本的早期版本。我鼓励你编辑你现有的问题来添加更多的细节,而不是在将来打开一个新的细节。欢迎来到StackOverflow! – 2011-04-05 15:56:40

+0

不能,不能访问生成的类。我想要做的是在全球范围内呼叫某人的公共网络服务。 – Julie 2011-04-05 15:58:17

回答

0

有许多工具从WSDL定义文件生成webservices Java类。

您可以尝试JAXB,这是此任务的标准Java工具。 另一种可能性是Axis,这个级别更高。

0

您需要一个SOAP库,例如Apache Axis2。该库将包含用于从WSDL生成Java类的工具。您可以使用生成的代码进行Web服务调用。

+0

所以基本上没有办法在飞行中生成这些类?我的意思是我想要部署一个可以运行Web服务的应用程序,只需了解WSDL URL即可。似乎这将是一件非常常见的事情。 – Julie 2011-04-05 16:01:17

+0

您可以想象使用Axis2在运行时生成新客户端,并将这些新类加载到当前JVM中以调用Web服务。我从来没有试过这样做,甚至没有看到过需要这样做。您也可以尝试编写一个“通用”客户端来检查WSDL并创建对该服务的一次性调用。基本上你会做什么SOAP库的生成器,而不写任何客户端代码到磁盘。 – 2011-04-05 16:06:32

0

根据您的第一个示例,我认为您使用CXF框架。

该框架提供了一个名为wsdl2java的任务,允许从WSDL文件生成类。

一旦您的类生成了,您可以在代码中使用它们以简单的方式调用Web服务,而无需手动构建SOAP消息。这是CXF的工作。