Skip to content
This repository has been archived by the owner on Feb 5, 2019. It is now read-only.

WebMethod returns null if there is no other parameter before the holder parameter #1224

Open
LanceAndersen opened this issue Apr 27, 2018 · 0 comments

Comments

@LanceAndersen
Copy link

Previously tracked via: https://bugs.openjdk.java.net/browse/JDK-8170462

To reproduce the issue:

  1. wsgen -cp . wstest.EchoImpl against the following java file:
    package wstest;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.Holder;
import java.rmi.RemoteException;
import javax.jws.soap.SOAPBinding;

@webservice
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class EchoImpl {
@webmethod
public String holderOperation(@WebParam(name="holder1", mode=WebParam.Mode.INOUT)Holder holder1,
@WebParam(name="holder2", mode=WebParam.Mode.INOUT)Holder holder2) throws RemoteException{
holder1.value += "1";
holder2.value += "2";
return "success";
}
}

  1. start the web service with the following java file:
    package wstest;

import javax.xml.ws.Endpoint;

public class EchoService {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8080/WebServices/echoimpl", new EchoImpl());
}
}

  1. generate the client:
    wsimport -keep -p wstest.server http://localhost:8080/WebServices/echoimpl?wsdl

  2. run the client test with the following java file:
    import java.rmi.;
    import javax.naming.
    ;
    import wstest.server.*;
    import javax.xml.ws.Holder;

public class EchoClient {
public static void main(String[] args) {
EchoImplService service = new EchoImplService();
EchoImpl port = service.getPort(EchoImpl.class);
Holder h1 = new Holder("1");
Holder h2 = new Holder("2");
String result = port.holderOperation(h1, h2);

    System.out.println(result); 
    System.out.println(h1.value); 
    System.out.println(h2.value); 
} 

}

Will get:
null
11
22

Note:

  1. Obviously some changes made the result better, now only the return value is null.
  2. If removing @SOAPBinding(style=SOAPBinding.Style.RPC) from EchoImpl java file or inserting a non-holder parameter at the first place in holderOperation method, it will have return value.
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant