使用Java消费wsdl 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>

我试图使用Java中的WSDL Web服务,最终将成为Eclipse插件

我可以使用File>New>Other来选择“Web服务客户机”,它可以正常工作,但它会生成一堆文件,当Web服务发生变化时,这些文件必须进行更改/重新生成,这简直是垃圾

我到处都能看到各种各样的做事方式,但我无法让它们中的任何一种真正做到我想要的

下面是一些代码:

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的所有内容都不兼容,但这里有一些例子:

[注意]我保留了以下原始的、被误解的回复,以防对任何人有所帮助。

本文很好地总结了您从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!
}