我正在学习使用@WebService注释类的绳索,我注意到当我部署到TomEE-plus(v1.6)时,URL中还会有一个额外的“ webservices”字样。

我想删除它或重命名它(如果可能)。

对于名为WebAPI-DEV的Eclipse项目,给出以下代码:

import java.util.List;
import javax.ejb.Stateless;
import javax.jws.WebService;

@Stateless
@WebService
public class WEBAPIImplementation {
    public List<Client> getClientsByTerm(String term) {
        return null;
    }
}


我在catalina日志上发现以下内容:

Dec 10, 2013 3:49:05 PM org.apache.openejb.server.webservices.WsService deployApp
INFO: Webservice(wsdl=http://mylocalhost.com:8080/WebAPI-DEV/webservices/WEBAPIImplementation, qname={http://mylocalhost.com:8080/webapi}WEBAPIImplementationService) --> Ejb(id=WEBAPIImplementation)


网址http://mylocalhost.com:8080/WebAPI-DEV/webservices/WEBAPIImplementation包含“ webservices”。

我希望对定义Web服务URL的确切名称具有更多控制权。

那可能吗?

更新(2013-DEC-16):
我遵循了来自的简单教程


  http://blog.sortedset.com/step-by-step-web-services-with-tomcat-tomee-apache-cxf-eclipse/


基本上,@ Webservice批注中的参数会导致如下错误:

org.apache.openejb.config.ValidationFailedException: Module failed validation. AppModule(name=TEST-WS)


和...

org.apache.catalina.LifecycleException: An invalid Lifecycle transition was attempted ([before_destroy]) for component [StandardEngine[Catalina].StandardHost[mylocalhost.com].StandardContext[/TEST-WS]] in state [STARTING_PREP]


和...

SEVERE: Error deploying web application archive C:\apache-tomee-plus-1.6.0\webapps\TEST-WS.war
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[mylocalhost.com].StandardContext[/TEST-WS]]


最初,我有@Webservice (replace sortedset.com for localhost):的这些参数

@WebService(
        portName = "HelloTomEEPort",
        serviceName = "HelloTomEEService",
        targetNamespace = "http://localhost/wsdl",
        endpointInterface = "HelloTomEEWs")


这是我的两个源文件(我从头开始了一个新项目):

TESTWS.java

import javax.jws.WebService;
@WebService
public interface TESTWS {
    public int sum(int add1, int add2);
    public int multiply(int mul1, int mul2);
}


TESTWSImpl.java

import javax.ejb.Stateless;
import javax.jws.WebService;
@Stateless
@WebService
public class TESTWSImpl implements TESTWS {
    public int sum(int add1, int add2) {
        return add1 + add2;
    }
    public int multiply(int mul1, int mul2) {
        return mul1 * mul2;
    }
}


此代码允许TomEE启动,但是当我请求url时(如在catalina.log中找到的):


  http://mylocalhost.com:8080/TEST-WS/webservices/TESTWSImpl


我收到此错误:

Dec 16, 2013 5:21:57 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
WARNING: Interceptor for {http://mylocalhost.com/wsdl}TESTWSImplService has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: No such operation: TEST-WS (HTTP GET PATH_INFO: /TEST-WS/webservices/TESTWSImplnull)
    at org.apache.cxf.interceptor.URIMappingInterceptor.handleMessage(URIMappingInterceptor.java:93)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:262)
    at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
    at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:237)
    at org.apache.openejb.server.cxf.CxfWsContainer.onMessage(CxfWsContainer.java:85)
    at org.apache.openejb.server.webservices.WsServlet.service(WsServlet.java:98)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:45)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)


是什么原因导致“无此操作”?

在哪里可以找到有关@Webservice参数的好的文档?

注意:将localhost替换为mylocalhost.com

更新(2013-DEC-17):
我错误地调用了Web服务,正确的URL应该是:


  http://mylocalhost.com:8080/TEST-WS/webservices/TESTWSImpl?wsdl


引用于


  Simple webservice example tomEE not working


我猜我将学习如何使用此生成的url路径(“ webservices”),直到我了解有关如何配置它的更多信息。

更新(2014年1月20日):
我用Enpoint.publish完成了一种方法,并将其添加为答案。

最佳答案

不,你不能。那就是您计算机上WSDL的地址。您可以找到该文件夹​​并相应地重命名。那是最大的能力。
您也可以用IP地址替换localhost。

大多数情况下,在生成WSDL时,您可以配置WSDL的这一部分“ WebAPI-DEV/webservices/WEBAPIImplementati”。
例如,如果您尝试在SOAP UI中创建模拟Web服务,则可以在其中配置WSDL URL的除本地主机/ IP地址以外的所有部分。

据我所知。
 “掌握自己!掌握敌人!”

07-24 21:27