У нас есть некоторый существующий Java-код, запущенный на сервере Tomcat, который мы хотим разрешить коду на другой машине, поэтому мы изучаем веб-службы. Я новичок в веб-сервисах, и я думаю, что, наверное, я здесь что-то не так.Путаница о веб-сервисах
Я изучил несколько онлайн-руководств о том, как развернуть веб-службу JAX-WS в Tomcat. Я создал класс веб-службы и аннотировал его с помощью @WebService, написал файл web.xml и sun-jaxws.xml, упаковал эти файлы (а также Jar-файлы JAX-WS) в файл .war и развернул его в Tomcat , Это похоже на работу, поскольку я могу загрузить файл WSDL в браузере, указанном в Tomcat.
Это клиент веб-сервиса, с которым у меня возникают проблемы. Прежде всего, на стороне сервера есть существующие классы, которые отображаются в базе данных. Мы хотим разрешить клиенту использовать те же самые существующие классы и создавать экземпляры из них, вызывать веб-службу, а затем хранить объекты в базе данных. Однако, когда я запустил команду wsimport в отношении WSDL-файла сервера, он создал кучу классов Java, многие из которых похожи на наши существующие классы. Думаю, мы должны использовать их вместо наших существующих классов? Так много для повторного использования кода, если я не смущен, что очень возможно.
Итак, теперь я написал клиент, используя те классы, которые генерируются wsimport. Но я получаю ошибки компиляции. Некоторые из полей в наших существующих классах Java имеют тип java.net.InetAddress. Но по какой-то причине, wsimport генерируется свой собственный класс InetAddress, и это то, что он выглядит следующим образом:
package ems.server.webservices;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "inetAddress")
public class InetAddress {
}
Да это просто класс ничего в нем! Так что много ошибок компиляции я получаю сказать:
WSClient.java:37: setAddress(ems.server.webservices.InetAddress) in ems.server.webservices.NetworkAddress cannot be applied to (java.net.InetAddress)
networkAddress.setAddress(InetAddress.getByName("1.1.1.1"));
Я пытаюсь создать java.net.InetAddress, но он хочет, чтобы я использовать пустой класс, который был создан с помощью wsimport. Я должен делать что-то не так. Пожалуйста, просветите меня.
Посмотрите на настройку привязок JAXB. Я не уверен, что это будет полезно, но похоже, что вам нужно будет использовать некоторые настройки при создании классов. http://docs.oracle.com/javaee/5/tutorial/doc/bnbbf.html – ChadNC