Да.
Если вы можете создать метод Java, который 1) аннотируется @WebMetod и 2) принимает необходимые параметры и вызывает код вашей третьей стороны, а затем оборачивает его как веб-приложение, вы можете использовать стек Metro - https://metro.dev.java.net/ - с любым веб-контейнером Servlet 2.5 (поместите его в глобальную папку lib веб-контейнеров), чтобы предоставить вышеуказанный метод в качестве веб-службы. Мы используем встроенную Jetty, но я убедился, что это работает с Tomcat.
Я записал свои выводы в http://archive.midrange.com/java400-l/200904/msg00071.html
Я скачал Metro 1.4 с https://metro.dev.java.net/1.4/ (версия 1.5 очень новая и я на нее не смотрел), которая в итоге распаковывается в несколько jar-файлов.
Скопируйте webservices-api.jar, webservices-rt.jar, webservices-extra-api.jar и webservices-extra.jar (четыре файла) в папку, содержащую «благословенные» jar-файлы, общие для всех Tomcat - я верю в это это $ {TOMCAT} / lib для Tomcat 6. [1]
В вашем проекте Eclipse в конечном итоге будет WAR-файл:
Если JRE вашего рабочего пространства - Java 5, вы должны добавить webservices-api.jar в путь к классам (он не должен быть развернут в конце). Если это Java 6, вы можете пропустить этот шаг.
Создать класс foo.Ping в виде:
package foo;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
Ping is a simple web service class providing a "yes, we have contact" class.
Currently the doPing() method provides a response with the host name and
address (if available) and the current server time.
*/
@javax.jws.WebService
public class Ping {
@javax.jws.WebMethod(action = "doPing")
public String doPing() {
System.out.println("Ping.doPing() called.");
String hostName;
try {
hostName = InetAddress.getLocalHost().getHostName();
} catch (UnknownHostException e) {
hostName = "unknown (" + e.getMessage() + ")";
}
String hostAddress;
try {
hostAddress = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
hostAddress = "unknown (" + e.getMessage() + ")";
}
return "Reached '" + hostName + "' (" + hostAddress + ") at "
+ new java.util.Date() + " java.version="
+ System.getProperty("java.version", "(not set)");
}
}
- В своем WEB-INF / web.xml добавьте этот фрагмент:
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<servlet>
<description>JAX-WS endpoint - this servlet must handle all endpoints</description>
<display-name>webservice</display-name>
<servlet-name>webservice</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- each endpoint must have a mapping to the JAX-WS endpoint servlet -->
<servlet-mapping>
<servlet-name>webservice</servlet-name>
<url-pattern>/ws</url-pattern>
</servlet-mapping>
- Создать НОВЫЙ файл WEB-INF / sun-jaxws.xml:
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'>
<endpoint name='ping' implementation='foo.Ping'url-pattern='/ws'>
</endpoint
</endpoints>
Теперь разверните ваш военный файл на подготовленном выше Tomcat и откройте «/ ws» в развернутом веб-приложении. Это может быть http://localhost:8080/foo/ws
;. Это даст вам страницу с информацией, включая ссылку на WSDL для всех веб-сервисов, включая Ping. Эту ссылку можно использовать непосредственно в любом инструменте обработки WSDL, включая инструмент веб-службы в Eclipse IDE для Java EE Разработчики и WSDCi.
Надеюсь, это поможет вам:)
[1] Если вы не сделаете их глобальными, у вас возникнут проблемы с загрузкой классов!