2013-12-11 46 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 +運行的任何提示?