2013-12-11 36 views
2

我学习我的注释与类@WebService我注意到,当我部署到TomEE加(V1.6)我得到一个额外的“绳索通过@WebService产生的“Web服务”路径web服务'的话。如何改变TomEE

我想删除它或重命名它,如果可能的话。

鉴于此代码命名的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; 
    } 
} 

我发现在卡特琳娜记录以下:

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) 

的URL http://mylocalhost.com:8080/WebAPI-DEV/webservices/WEBAPIImplementation已经 'web服务' 包括在内。

我宁愿有定义我的web网址的确切名称更多的控制。

这可能吗?

UPDATE(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的参数,良好的文档?

注:更换mylocalhost。COM与本地主机

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

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

Simple webservice example tomEE not working

引用我猜我将学习如何使用这个生成的url路径('webservices'),直到我更了解如何配置它。

UPDATE(2014-JAN-20): 我完成一种方法与Enpoint.publish并添加它作为一个答案。

回答

1

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

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

就我所知的。 “主宰你自己!掌握敌人!”

+0

我试图寻找的WSDL文件,并没有发现什么。我搜索了一些表示WEB-INF /模式的引用,但该目录甚至没有创建。 –

1

url/WebAPI-DEV/webservices/WEBAPIImplementation包含'webservices'。

上面的网址是不是你的web服务的URL。它的位置在你的服务器上,这个wsdl位于。

打开这个网址的网页浏览器,您的WSDL将被打开。 现在在wsdl中搜索标签,在此标签内会有标签。这将是您的webservice端点url。在那里你不会找到这个addidtional“webservices”这个词。

这个“地址位置”将在sombody调用您的web服务时调用。

是的,你可以是绝对控制定义yoyr web服务的URL。

通常同时生成web服务,下面的格式之后,

的“http://://”

像上述forma.It实际上取决于你在哪里生成web服务,我的意思是哪个工具。

例如:在SAP PI(集成工具),web服务URL格式是这样的,

的https://:/?XISOAPAdapter/MessageServlet senderParty = & senderService = & receiverParty = & receiverService = &接口= & interfaceNamespace =

根据要求,您可以控制上述地址。

问候, ambuj “主人自己,掌握敌人”

+0

http:// //“ – kingAm

+0

不,它不起作用,我遵循http://blog.sortedset中的示例。com/step-by-step-web-services-with-tomcat-tomee-apache-cxf-eclipse /并且实际上我必须从@Webservice注释中删除所有参数,以便它可以获取默认值,否则它会TommEE会拒绝它。 –

+0

嗨萨尔瓦多,我已经通过了一些JAX-WS实现教程。现在我可以说,你可以完全配置你的终点网址。注意你发布端点URL的URL发布者类。例如Endpoint.publish(“http:// localhost:9899/ws/image”,新的ImageServerImpl());在这里你可以根据你的要求设置你的网址。 – kingAm

0

基于user3090039的回应,我已经实施了解决的紧迫性,以实现web服务的部分解决方案。我已经实现了一个Java程序,从main()方法中部署一个Ednpoint。我有两个类WSServer和OrderSearch。 WSServer是创建端点并将部署/发布细节传递给OrderSearch类的主要类。

WSServer类包含main()方法和汽艇和配置端点:

import javax.xml.ws.Endpoint; 

public class WSServer { 
    public static void main(String[] args) { 
     // Read application parameters into appSettings... 
     AppParams appSettings = readAppParams(propFileName); 

     //Create Endpoint, delegate configuration... 
     Endpoint.publish(appSettings.getWSEndPoint(), new OrderSearch(appSettings)); 
     System.out.println("OrderSearch service is ready"); 
    } 
} 

AppParams类看起来像这样(简化):

public class AppParams { 
    private String ws_end_point; 
    // Other private parameters here... 
    // Include appropiate getters and setters... 
} 

getWSEndPoint()返回字符串的方法类似于:http://mylocalhost/prodOrders这样发布了这样的WSDL:http://mylocalhost/prodOrders?wsdl

最后的OrderSearch类包含将在WSDL发布公众的webMethods:

import javax.jws.WebService; 
@WebService 
public class OrderSearch { 
    public OrderSearch(AppParams settings) { 
     // Use the settings object to initialize your business objects... 
    } 

    public List<ProductOrder> getOrdersByMonth(String orderMonth) { 
     List<ProductOrder> orderList = null; 

     orderList = dataAdapter.getOrdersByMonth(String orderMonth); 

     return orderList; 
    } 
} 

的Class ProductOrder只是笑着POJO与您的Web服务消费者需要的属性(即订单日期,订单号,产品ID等)。此POJO用于​​构建将发回消费者/用户的XML结构。

请注意,端点需要一个字符串和一个负责处理每个请求的实现者(OrderSearch)。

有关于如何使用Oracle描述的端点(简述)更多的选择:http://docs.oracle.com/javase/7/docs/api/javax/xml/ws/Endpoint.html

还有关于如何自定义端点URL的许多问题,但是这是我得到的工作。希望将来可以提供更好的文档。

我的下一个任务是移动这个由TOMEE +运行的任何提示?