【问题标题】:how to invoke the method of webservice with parameter?如何调用带参数的webservice方法?
【发布时间】:2020-01-26 20:56:35
【问题描述】:

我应该调用 web 服务来添加一个新用户。 为此,我使用 WSDL2JAVA 从 WSDL 生成工件

我的端点接口具有我可以调用的不同操作:

 @WebMethod
    @WebResult(name = "addUserReturn", targetNamespace = "url", partName = "addUserReturn")
    public User addUser(
        @WebParam(partName = "addUserRequest", name = "addUserRequest", targetNamespace = "url")
        UserRequest addUserRequest
    );

我的班级 USER 有这个:

  public String getFirstName() {
        return firstName;
    }

    /**
     * Sets the value of the firstName property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setFirstName(String value) {
        this.firstName = value;
    }

    /**
     * Gets the value of the greeting property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getGreeting() {
        return greeting;
    }

这些类是从 WSDL 自动生成的 我想实现这个接口并调用 ADD 方法,但我不知道怎么做?有要求

例如:如何调用此方法:

SoapService service = new SoapService();
SoapInterface inter = service.addUser(....); // here i don't know what i put 
// this parameter to refer  to : 
/*
 @WebMethod
    @WebResult(name = "addUserReturn", targetNamespace = "url", partName = "addUserReturn")
    public User addUser(
        @WebParam(partName = "addUserRequest", name = "addUserRequest", targetNamespace = "url")
        UserRequest addUserRequest
    ); */ 

Thanks ...

【问题讨论】:

    标签: java jax-ws soap-client webservice-client wsdl2java


    【解决方案1】:

    您可以将 wsdl2java 生成的类打包为 jar 文件并将其添加到类路径中,然后启动 @WebMethod 类来调用服务。

    参考文档here中的“编码客户端”部分

    我认为你可以做这样的事情。

            UserServiceImplService serviceImpl = new UserServiceImplService();
    
            UserService service = serviceImpl.getUserServiceImplPort();
    
            UserRequest userRequest = new UserRequest();
            userRequest.setFirstName("Tom");
            userRequest.setLastName("Jerry");
    
            User user = service.addUser(userRequest);
    

    这里有一个示例https://github.com/nkumarclm/jax-ws-examplejaxws 供您参考。

    另外,另一种方法是在您的 pom.xml 中使用 jaxws-maven-plugin,这样您可以将 wsdl 副本保存在本地并生成所有必需的工件。

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>web-services</id>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <wsdlDirectory>${basedir}/src/main/resources/wsdl/</wsdlDirectory> //location of your wsdl folder
                            <wsdlFiles>
                                <wsdlFile>user.wsdl</wsdlFile> //wsdl file name
                            </wsdlFiles>
                            <sourceDestDir>${basedir}/src/generated/java</sourceDestDir>
                            <verbose>true</verbose>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    

    然后您可以简单地自动装配@WebMethod 类并调用addUser 方法。

    【讨论】:

    • 谢谢,我这样做了,但我想调用带有参数的方法来引用```
    • *

      用于 UserRequest 复杂类型的 Java 类。 * <complexType name="UserRequest"> * <复杂内容> * <restriction base="{w3.org/2001/XMLSchema}anyType"> * <序列> * odum.service.odp.ondemand.ca.com}用户"/> * </序列> * </限制> * </复杂内容> * </complexType>

    • @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "UserRequest", propOrder = { "Options", "user" }) ```` 调用的方法参考@WebMethod public com .ca.....用户 addUser(@WebParam(partName = "addUserRequest") com....service.UserRequest addUserRequest);
    • @Zenzouna 当您说“带有要引用的参数的方法”时,我不太清楚。您能否使用您在上述 cmets 中提供的详细信息更新问题?谢谢!
    • 感谢您的更新。我认为它已在我的回答中提供。因此,您应该启动 UserRequest 输出中存在的类 UserRequest,然后填充值并使用 userRequest 对象作为参数调用 addUser 方法。用户请求用户请求 = 新用户请求(); userRequest.setFirstName("汤姆"); userRequest.setLastName("杰瑞");用户用户 = service.addUser(userRequest);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    相关资源
    最近更新 更多