Кажется, что Glassfish 3 развертывает мой веб-сервис Java EE 6 по неправильному URL-адресу, когда я использую определение endpointInterface, и я не могу понять, почему.Это то, что я дошел до этого:
У меня есть определение веб-службы, подобное следующему:
@WebService(name = "HelloService")
public interface HelloService
{
@WebMethod
String sayHello(String name);
}
И реализация службы как EJB без сохранения состояния:
@WebService(serviceName = "HelloWebService", portName = "HelloServicePort", endpointInterface = "helloServicePackage.HelloService")
@Stateless
public class HelloServiceImpl implements HelloService
{
public String sayHello(String name)
{
return "Hello " + name;
}
}
Для развертывания на Glassfish я использую sun-ejb-jar.xml:
<sun-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>HelloServiceImpl</ejb-name>
...
<webservice-endpoint>
<port-component-name>
HelloService
</port-component-name>
<endpoint-address-uri>
Services/HelloService
</endpoint-address-uri>
</webservice-endpoint>
</ejb>
</enterprise-beans>
</sun-ejb-jar>
Затем Gassfish развертывает мой сервис по URL-адресу // HelloWebService / HelloServiceImpl, что не является тем, что я намеревался.
Однако, если я опускаю определение endpointInterface и использую имя в реализации службы напрямую, например
@WebService(serviceName = "HelloWebService", portName = "HelloServicePort", name= "HelloService")
@Stateless
public class HelloServiceImpl
{
@WebMethod
public String sayHello(String name)
{
return "Hello " + name;
}
}
, тогда служба правильно развертывается в // Services / HelloService
Как мнеНужно изменить annotations / sun-ejb-jar.xml, чтобы развертывание также работало с использованием endpointInterface?
С уважением, Тилман