使用Java消费wsdl Web服务的简单示例?
我试图使用Java中的WSDL Web服务,最终将成为Eclipse插件 我可以使用File>New>Other来选择“Web服务客户机”,它可以正常工作,但它会生成一堆文件,当Web服务发生变化时,这些文件必须进行更改/重新生成,这简直是垃圾 我到处都能看到各种各样的做事方式,但我无法让它们中的任何一种真正做到我想要的 下面是一些代码:使用Java消费wsdl Web服务的简单示例?,java,web-services,wsdl,jax-ws,Java,Web Services,Wsdl,Jax Ws,我试图使用Java中的WSDL Web服务,最终将成为Eclipse插件 我可以使用File>New>Other来选择“Web服务客户机”,它可以正常工作,但它会生成一堆文件,当Web服务发生变化时,这些文件必须进行更改/重新生成,这简直是垃圾 我到处都能看到各种各样的做事方式,但我无法让它们中的任何一种真正做到我想要的 下面是一些代码: String WsdlUrl = "http://localhost:port/path/to/wsdl"; ArrayList<String>
String WsdlUrl = "http://localhost:port/path/to/wsdl";
ArrayList<String> args = new ArrayList();
args.add("arg1");
args.add("arg2");
// etc
Webservice ws = setupWebserviceObject( WsdlUrl );
Object result = ws.invoke("methodname",args);
System.out.println(result);
String WsdlUrl=”http://localhost:port/path/to/wsdl";
ArrayList args=新的ArrayList();
增加(“arg1”);
增加(“arg2”);
//等
Webservice ws=setupWebserviceObject(WsdlUrl);
objectresult=ws.invoke(“methodname”,args);
系统输出打印项次(结果);
基本上,我需要的是将“Webservice”、“setupWebserviceObject”和“invoke”更改为任何工作方式,而不需要预先生成类,并且尽可能少地使用任何其他烦人的东西
这似乎不难做到,但到目前为止,我还没有找到一个明确的例子来说明如何做到这一点
有人能帮忙吗?我想“简单”的概念与WSDL的所有内容都不兼容,但这里有一些例子:
如果使用Java 6+,JAX-WS提供程序API实现可能是最简单的方法。我建议使用axis2命令行工具,最简单的方法是: java2wsdl-cn完全限定类名 wsdl2java-uriwsdllocation-ss-sd-uw-g-o outputLocation
cd
进入outputLocation
并运行ant
将生成的
.aar
文件放入WEB-INF/services
文件夹以创建服务(如果您只需要客户端,则不需要),并将生成的存根文件复制到源文件夹。您可以使用YourServiceSkeleton
类来实现业务逻辑,并为客户端使用YourServiceStub
类简单方法一步一步:
这是使用ApacheCXF和Maven依赖关系管理实现的
1-获取保存在文件中的服务的WSDL描述符。将它放在项目的resources文件夹中(如果您使用eclipse,则该文件夹应位于项目的SourceFolders列表中)
2-在pom.xml中声明依赖项:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http</artifactId>
<version>2.7.7</version>
</dependency>
5-利润
注意:如果该方法没有返回您必须强制转换到它返回的对象的列表。除非我误读了它,否则该页面是关于用Java创建新的Web服务的?这不是我需要的。我问的是使用现有Web服务的Java代码是什么。啊,我的错误,我以为您是想从WSDL实现Web服务,而不是使用它。我想问题中的“createWebservice”可能会让人困惑-我将其重命名为“setupWebserviceObject”。WSDL使用很简单。使用其他工具,使用其他编程语言。我也在关注同样的问题。你们有解决这个问题的方法吗?
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.7.7</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/resources/WebService.wsdl.xml</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
String methodName = "getSomethingFromMyWebService";
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
Client client = dcf.createClient(ConsumeTest.class.getClassLoader().getResource("WebService.wsdl.xml"));
Object[] res = client.invoke(methodName,parameter1,parameter2, parameterN);
SomethingObject[] somethingObjectList = (SomethingObject[])res[0];
Class.forName(res.getClass().getName()).isArray();
for(SomethingObject so : somethingObjectList){
// do something!
}