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