package org.huahsin.main.bo; ... @WebService(targetNamespace = "http://main.huahsin.org/") public interface IPersonService { @WebMethod public String getPerson(String name); } package org.huahsin.main; ... @WebService(serviceName = "PersonService", endpointInterface = "org.huahsin.main.bo.IPersonService", portName = "PersonServicePort") public class PersonService implements IPersonService { @Override public String getPerson(String name) { return "Hello World " + name; } }Take good care of the endpointInterface, I mess up this name with the implementation class name, that suppose belong to an Interface. Next is to fire up the WSDL through HTTP. Previously I was using this trick to make a WSDL file:
public class PersonClient { public static void main(String[] args) { Endpoint.publish("http://localhost:8080/ws", new PersonService()); } }And then hit the URL http://localhost:8080/ws?wsdl in the browser, copy the content in the WSDL file. Actually wsgen has already covered the WSDL file generation with -wsdl as shown following command:
wsgen -keep -wsdl -cp ./WebContent/WEB-INF/classes org.huahsin.main.PersonService
There will be some minor modification on the REPLACE_WITH_ACTUAL_URL after WSDL file is generated:
<service name="PersonService"> <port binding="tns:PersonServicePortBinding" name="PersonServicePort"> <soap:address location="REPLACE_WITH_ACTUAL_URL"/> </port> </service>Just replace any URL as you like, make sure the IP and port are accessible, it is very useful to determine what are the service available currently deployed.
* Do take note that when I deploy this code into WebSphere Liberty Profile (v8.5.5.8 as of this writing) with CXF runtime bundle with my code, it causes conflict error. According to the documentation, I should not enable jaxws-2.2 feature.
If you application provides its own copy of CXF JAR files as the application libraries, for example, in the WEB-INF/lib directory of a web application, you cannot enable the jaxws-2.2 feature in the server.xml file.
No comments:
Post a Comment