Java 调用web服务。需要缺少的链接吗
有人可以在下面的代码中填写缺少的链接吗 第一种方式: web服务接口文件是HappyServiceJava 调用web服务。需要缺少的链接吗,java,web-services,hyperlink,Java,Web Services,Hyperlink,有人可以在下面的代码中填写缺少的链接吗 第一种方式: web服务接口文件是HappyService JaxWSProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getInterceptors().add(new LoggingInInterceptor()); factory.getInterceptors().add(new LoggingOutInterceptor()); //MISSING LINK. Wh
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请求,我真的不想这样做,因为它可能会变得非常大并且容易出错。有许多工具可以从WSDL定义文件生成web服务Java类 您可以尝试,这是此任务的标准Java工具。
另一种可能性是,哪个级别更高。您需要一个SOAP库,例如。该库将包括用于从wsdl生成Java类的工具。您可以使用生成的代码进行web服务调用。基于您的第一个示例,我认为您使用的是框架 该框架提供了一个名为的任务,该任务允许从WSDL文件生成类
生成类后,您可以在代码中使用它们以简单的方式调用Web服务,而无需手动构建SOAP消息。这是CXF的工作。我认为,如果您参考一些java中web服务的基础知识,会有所帮助
您是否使用Web服务框架?根据第一个示例,我认为您使用的是CXF。HappyService类必须是由CXF提供的wsdl2java任务生成的类。你没有生成的类包吗?我注意到你的另一个问题看起来像是这个问题的早期版本。我鼓励您编辑您现有的问题,以添加更多细节,而不是在将来打开一个新的问题。欢迎来到StackOverflow!不,无法访问生成的类。我想做的是在全球范围内调用某人的公共web服务。您有权访问目标web服务的WSDL吗?请看下面我的答案,这可能会对您有所帮助。所以基本上没有办法动态生成这些类?我的意思是,我想部署一个只知道WSDL URL的应用程序来运行web服务。这似乎是一件非常常见的事情。可以想象,您可以在运行时使用Axis2生成一个新客户机,并将这些新类加载到当前JVM中以调用web服务。我以前从未尝试过这样做,甚至没有必要这样做。您还可以尝试编写一个通用客户机来检查WSDL并创建对该服务的一次性调用。基本上,您将执行SOAP库生成器所做的操作,而无需将任何客户端代码写入磁盘。