# CXF Project auf Tomcat laufen lassen - wie?



## pocketom (20. Jul 2009)

Hi,

ich bin letzte Woche von Axis2 auf CXF umgestiegen. Zuletzt habe ich mir Klassen und ServicePort Interface generieren lassen (mit Maven2 CXF Plugin aus einem WSDL File), was soweit prima funktioniert hat. Nur wie mache ich daraus nun ein WAR Projekt das ich auf meinem Apache Tomcat installieren kann? Ich habe nun eine Menge gegoogelt und dabei lediglich herausgefunden das es sich offenbar nicht um den Standardweg handelt (Spring WS wird stattdessen oft in dem Zusammenhang genannt). Ich suche einfach einen Weg (analog zu den Axis2 *.aar Files) um meinen Service auf den Tomcat zu deployen. Würde mich sehr freuen wenn mir jemand hierzu kurz den ein oder anderen Denkanstoss geben kann, ich blick einfach nicht mehr durch :-(

Vielen Dank schonmal!


EDIT: Wie lasse ich mir die web.xml generieren, bzw. das WEB-INF Verzeichnis (oder muss ich es von Hand anlegen)?


----------



## byte (20. Jul 2009)

Du kannst Dir mit Maven ein Web Projekt erzeugen lassen: Maven - Guide to Webapps

 Oder Du machst das mit Deiner IDE (bei Eclipse heisst das Dynamic Web Project).


----------



## pocketom (20. Jul 2009)

OK, danke! Ich habe es mit Maven gemacht. Nun habe ich ein war file in meinem Target Folder. Fehlt nur noch das web.xml im WEB-INF Folder, das wird irgendwie noch nicht generiert. Muss ich das manuell erstellen?


----------



## tuxedo (20. Jul 2009)

btw: falsches Board, oder? Hat ja recht wenig mit Netzwerk und viel mehr mit Deployment zu tun...

- Alex


----------



## pocketom (20. Jul 2009)

Maybe, falls dem so ist könnt Ihr es gern verschieben.

Kann mir trotzdem grad jemand helfen wie ich mit der web.xml verfahren muss, von Hand erstellen oder gibts einen Weg die automatisch erstellen zu lassen?


----------



## Noctarius (20. Jul 2009)

Hab es mal verschoben.

Zum Problem: Eigentlich sollte dir ein Maven Webapp Archetype ein passendes web.xml automatisch erstellen.


----------



## pocketom (20. Jul 2009)

Hmm, ich hab nix zwecks Maven Webapp Archetype angegeben, da ich keinen passenden Archetype in der Eclipse Archetype Selection gefunde habe. Wo finde ich dieses Archetype (bzw. in welchem Catalog/Repository)?

Wenn ichs per CMD mache, also

_mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp_

erhalte ich den Fehler:

_Embedded error: Unable to add module to the current project as it is not of pack
aging type 'pom'_

Mein Projekt ist ja auch <packaging>war</packaging> ???


----------



## byte (20. Jul 2009)

Leg die Datei doch einfach an!? Ist doch nun wirklich nicht so schwer.

Oder leg ein Projekt mit der IDE an und kopier die web.xml von dort rüber.


----------



## pocketom (20. Jul 2009)

Hab ich gemacht, mich hat nur interessiert worans lag. Aber du hast recht, da ist ja eh fast nichts drin, ein Dummy quasi.


----------



## Noctarius (20. Jul 2009)

pocketom hat gesagt.:


> _mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-webapp -DarchetypeArtifactId=maven-archetype-webapp_



Hm der Archetype stimmt aber. Keine Ahnung wieso das nicht ging.


----------



## pocketom (20. Jul 2009)

Habs gefunden, es ging deshalb nicht weil der Catalog auf "NExus Indexer" stand. Stellt man das auf "internal" dann klappts auch mit dem webapp Archetype 


Nun hab ich nur noch ein Problem:

Es läuft prima wenn ich mir Client- und (Standalone)Servercode zusammen generieren lasse, der Client will aber nicht wenn ich das ganze mit Maven auf dem Tomcat deploye:



```
20.07.2009 17:24:02 org.apache.cxf.phase.PhaseInterceptorChain doIntercept
INFO: Interceptor has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not send Message.
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:64)
	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:471)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:301)
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:253)
	at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
	at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:121)
	at $Proxy39.sendEnqueueLabelRequest(Unknown Source)
	at com.eurofinsdna.services.labelservice.LabelQueuing_LabelServiceHttpSoap12Endpoint_Client.main(LabelQueuing_LabelServiceHttpSoap12Endpoint_Client.java:45)
Caused by: java.io.IOException: Not Found
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2064)
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2015)
	at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1940)
	at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
	at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:627)
	at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
	... 8 more
```

Was könnte da noch faul sein?



[EDIT] 
Wenn ich den Standalone Server starte dann kann ich unter http://localhost:8080/MyService auch per Browser zugreifen, ich bekomme halt ein  soap-fault was aber ok ist da ich so ja nur checken will ob mein Service erreichbar ist.

Wenn ich das war File MyService.war auf dem Tomcat deploye (manuell), dann bekomme ich unter http://localhost:8080/MyService einen 404 Error (der Standalone Server ist natürlich gestoppt, Tomcat gestartet). Im WSDL File unter MyService/WEB-INF/wsdl/MyService.wsdl ist jedoch exakt die selbe Serive URL (<soap12:address location="http://localhost:8080/MyService"/>) eingetragen???


----------



## byte (20. Jul 2009)

Normalerweise rufst Du eine Webapp so auf: http://localhost:8080/contextRoot/MyService

Musst Du mal gucken, wie der ContextRoot in Deinem Fall ist. Das kann z.B. der Name der War Datei sein (wenn Du beim Tomcat per Tomcat Manager deployst) oder auch die ArtifactId, wenn Du mit Mavens tomcat:run einen Embedded Tomcat startest.

IdR wird beim Deployment geloggt, wie die genaue Adresse der Webapp lautet (inkl. Context Root).


----------



## pocketom (21. Jul 2009)

Ich habe jetzt nochmal beide Varianten probiert - Fehlanzeige :-(


*1. Variante:* Lasse ich es über mvn tomcat:run laufen, so schreibt er mir in der Commandline am Ende:


```
[INFO] [tomcat:run]
[INFO] Running war on http://localhost:8080/cxf-test-service
[INFO] Creating Tomcat server configuration at N:\workspace\java\cxf-test-servic
e\target\tomcat
21.07.2009 09:55:47 org.apache.catalina.startup.Embedded start
INFO: Starting tomcat server
21.07.2009 09:55:47 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.16
21.07.2009 09:55:48 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
21.07.2009 09:55:48 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
```

cxf-test-service ist die ArtifactID. Nun habe ich probiert http://localhost:8080/cxf-test-service, http://localhost:8080/cxf-test-service/MyService usw. Dabei ist mir aufgefallen das z.B. http://localhost:8080/cxf-test-serviXXX, also einfach falsch geschrieben, eine weisse Seite im Browser liefert, tippt mans aber korrekt ein dann liefert Tomcat:


```
HTTP Status 404 - /cxf-test-service/

type Status report

message /cxf-test-service/

description The requested resource (/cxf-test-service/) is not available.
```



*2. Variante * Manueller Upload des WAR Files:

Das Logging habe ich auf 'Debug' gestellt so das alles in den Logs landen müsste. Mehrfach deployed und wieder undeployed

manager.2009-07-21.log, man sieht aber irgendiwe nur das undeploy

```
INFO: HTMLManager: undeploy: Undeploying web application at '/MyService'
21.07.2009 09:47:47 org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
21.07.2009 09:48:13 org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: undeploy: Undeploying web application at '/MyService'
```

catalina.2009-07-21.log

```
21.07.2009 10:41:35 org.apache.catalina.startup.Catalina start
INFO: Server startup in 319 ms
21.07.2009 10:41:44 org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive MyService.war
21.07.2009 10:41:51 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Java\apache-tomcat6.0\Tomcat 6.0\webapps\LabelQueuingService0.1\WEB-INF\lib\geronimo-servlet_2.5_spec-1.2.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
21.07.2009 10:41:51 org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\Java\apache-tomcat6.0\Tomcat 6.0\webapps\LabelQueuingService0.1\WEB-INF\lib\servlet-api-2.5-6.1.6.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
```

Die jar not loaded soll man ja angeblich ignorieren können...? Mehr Infos finde ich nicht, im Tomcat Manager ist der Service ebenfalls eingetragen und gestartet. Unter localhost:8080/MyService gibts wieder den 404, allerdings bekommt man jetzt keine weissen Seiten wenn man sich vertippt sondern immer 404. D.h. bei Variante 1 muss unter localhost:8080/ArtifactID irgendwas angesprochen worden sein, anders kann ichs mir nicht erklären.


Bin mit meiner Weisheit langsam echt am Ende :-(


----------



## Noctarius (21. Jul 2009)

Wie heißt denn dein Servlet in der web.xml?

http://localhost:8080/MyService/MyService geht auch nicht?


----------



## byte (21. Jul 2009)

Also normalerweise solltest Du unter folgenden URLs Ergebnisse bekommen:

http://localhost:8080/myContextRoot/myWebservice?wsdl - zeigt die WSDL Datei
http://localhost:8080/myContextRoot/myWebservice/getSomething - Methodenaufruf
http://localhost:8080/myContextRoot/myWebservice/doSomething?param=... - Methodenaufruf mit Parametern


Hier gibts gute CXF Tutorial zur Integration mit Spring: 
- Web Services with Spring 2.5 and Apache CXF 2.0 - Wheeler Software
- Make Web Services Transparent with Spring 2.5 and Apache CXF 2.0 - Wheeler Software

Haben bei mir bestens funktioniert.


----------



## Noctarius (21. Jul 2009)

Wobei myContextRoot eben MyService wäre (zu mindestens im obigen Falle), außer die context.xml würde was anderes definieren.


----------



## byte (21. Jul 2009)

Wieso denn MyService? Der ContextRoot ist doch das Verzeichnis, in dem die Webapp auf dem Tomcat deployed ist. Bei Mavens tomcat:run nimmt er da die ArtifactId, ansonsten ist es der Name des War Files, falls nix anderes angegeben wurde.

MyService ist doch in diesem Fall der Name des Servlets, unter dem der Webservice läuft.


----------



## pocketom (21. Jul 2009)

Nein, das geht auch nicht, habs probiert. Normal muss es die Service URL sein so wie im WSDL eingetragen, also nur localhost:8080/MyService. Lässt man den generierten Server standalone laufen (Jetty glaube ich), dann funkts einwandfrei, das ist was ich nicht verstehe.

in der web.xml steht nicht viel drin (hab sie so gelassen wie sie generiert wurde):


```
<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>CXF Testproject</display-name>
</web-app>
```

Installiert man das WAR manuell im TC manager dann trägt er auch brav "CXF Testproject" in die zweite Spalte ein.

http://localhost:8080/myContextRoot/myWebservice?wsdl funktioniert auch prima, aber nur wenn ich den Standalone starte (myContextRoot ist in dem Fall leer!). Über TC gehts nicht, egal welche Combo ich für ContextRoot/MyWebService auch probiere.


----------



## byte (21. Jul 2009)

Mit ner leeren web.xml kann das doch auch nicht klappen. Da muss das CXF-Servlet rein, siehe Apache CXF 2.0 User's Guide - Servlet Transport


----------



## Noctarius (21. Jul 2009)

byto hat gesagt.:


> Wieso denn MyService? Der ContextRoot ist doch das Verzeichnis, in dem die Webapp auf dem Tomcat deployed ist. Bei Mavens tomcat:run nimmt er da die ArtifactId, ansonsten ist es der Name des War Files, falls nix anderes angegeben wurde.
> 
> MyService ist doch in diesem Fall der Name des Servlets, unter dem der Webservice läuft.





> INFO: Deploying web application archive MyService.war



Da


----------



## Noctarius (21. Jul 2009)

pocketom hat gesagt.:


> http://localhost:8080/myContextRoot/myWebservice?wsdl funktioniert auch prima, aber nur wenn ich den Standalone starte (myContextRoot ist in dem Fall leer!). Über TC gehts nicht, egal welche Combo ich für ContextRoot/MyWebService auch probiere.



Weil dann der Root-Context genommen wird. Der Root-Context ist prinzipiell ein Platzhalter für einen nicht benannten Context (heißt unter Tomcat ROOT -> "/webapps/ROOT").


----------



## byte (21. Jul 2009)

Im Zweifel einfach mal auf dem Tomcat nachgucken, in welchem Verzeichnis die Webapp liegt.

Aber wenn die web.xml leer ist, dann ist auch kein Servlet da, das man in dieser Webapp aufrufen könnte!?


----------



## pocketom (21. Jul 2009)

Bist sicher das Servlet-Transport das richtige ist? Ich mach kein JSP... Wir wollen auf den Dienst von verschiedenen Plattformen(Delphi, C#, Java) mit SOAP zugreifen, deshalb das gemeinsame WSDL als Basis. So wie ich das gelesen habe braucht man doch eine Klasse die von HttpServlet abgeleitet ist damit das klappt oder?

Habs aber trotzdem mal probiert, aber es klappt leider auch nicht:


```
<web-app> 
  <servlet> 
    <servlet-name>CXFServlet</servlet-name> 
    <display-name>CXF Servlet</display-name> 
    <servlet-class> 
        com.mycompany.services.myservice.MyServiceImpl 
    </servlet-class> 
  </servlet> 
 
  <servlet-mapping> 
    <servlet-name>CXFServlet</servlet-name> 
    <url-pattern>/MyService</url-pattern> 
  </servlet-mapping> 
</web-app>
```

Siehst du evtl. einen Fehler?


----------



## Noctarius (21. Jul 2009)

Wenn dein WAR-File auch MyService heißt und du von Hand deployest und du in der context.xml das Context-Root nicht überschrieben hast, ist mit dieser web.xml deine Adresse folgende:


```
http://localhost:8080/MyService/MyService
```


----------



## byte (21. Jul 2009)

pocketom hat gesagt.:


> Bist sicher das Servlet-Transport das richtige ist? Ich mach kein JSP... Wir wollen auf den Dienst von verschiedenen Plattformen(Delphi, C#, Java) mit SOAP zugreifen, deshalb das gemeinsame WSDL als Basis. So wie ich das gelesen habe braucht man doch eine Klasse die von HttpServlet abgeleitet ist damit das klappt oder?
> 
> Habs aber trotzdem mal probiert, aber es klappt leider auch nicht:
> 
> ...



Wie sieht denn MyServiceImpl aus? Benutzt Du CXF mit Spring oder ohne? Falls mit, dann muss 
	
	
	
	





```
org.apache.cxf.transport.servlet.CXFServlet
```
 in die web.xml (siehe Link oben). Falls Du ohne Spring arbeitest, dann musst Du ein Servlet von CXFNonSpringServlet ableiten (siehe Link oben).

Auf jeden Fall: siehe Link oben


----------



## pocketom (21. Jul 2009)

Noctarius hat gesagt.:


> Wenn dein WAR-File auch MyService heißt und du von Hand deployest und du in der context.xml das Context-Root nicht überschrieben hast, ist mit dieser web.xml deine Adresse folgende:
> 
> 
> ```
> ...




Korrekt. Da tut sich jetzt was. Allerdings das was ich bereits geahnt habe...


```
avax.servlet.ServletException: Class com.mycompany.services.MyServiceImpl is not a Servlet
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	java.lang.Thread.run(Unknown Source)

root cause

java.lang.ClassCastException: com.mycompany.services.MyServiceImpl cannot be cast to javax.servlet.Servlet
	org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
	org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
	java.lang.Thread.run(Unknown Source)
```


Oben habe ich ja grob beschrieben was ich vorhabe, falls das nicht reicht gebe ich gern mehr Auskunft.


----------



## byte (21. Jul 2009)

siehe mein letzter Post


----------



## pocketom (21. Jul 2009)

Wenn ich den Client (auch von WSDL2JAVA generiert, so wie der Server) starte kommen erstmal jede Menge Spring Sachen:


```
21.07.2009 12:28:49 org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.apache.cxf.bus.spring.BusApplicationContext@1201a25: display name [org.apache.cxf.bus.spring.BusApplicationContext@1201a25]; startup date [Tue Jul 21 12:28:49 CEST 2009]; root of context hierarchy
```

Sollte also Spring sein nehme ich mal an. Ich habe also der MyServiceImpl Klasse ein _extends CXFServlet_ hinzugefügt.

Jetzt kommt wenn ich die URL aufrufe:


```
No service was found.
```

Natürlich habe ich http://localhost:8080/MyService/MyService?wsdl auch probiert - nix.



[EDIT] die non Spring auch getestet, da kommt dann wieder der 404. Es muss also Spring sein...


----------



## byte (21. Jul 2009)

So kommen wir nicht weiter. Dir scheint es am Knowhow zu mangeln, wie CXF überhaupt funktioniert. Wirf doch nochmal einen Blick in die Doku oder mache das von mir oben gepostete Tutorial Schritt für Schritt durch.


----------



## pocketom (21. Jul 2009)

Die CXF Doku habe ich weitestgehend durch, auf diesem Wege ist ja auch ein funktionierender Standalone Server zustande gekommen. Es geht jetzt wirklich nur noch drum das mit Maven erzeugte WAR auf Tomcat zu deployen und laufen lassen. Ich blick ehrlich gesagt halt grad einfach nicht mehr durch worans noch scheitern könnte... :-(


----------



## pocketom (21. Jul 2009)

Hier die MyServiceImpl:

Der WSDL2Java Generator hat wiegesagt das "extends CXFServlet" nicht selbst generiert! Sicher das man das als Servlet starten muss? Ich verstehe einfach nicht wieso das Standalone Teil so funktionert wie es ist???? Normal sollte der WSDL2Java doch alles Server und Client Stubs soweit fertig machen das man nur noch seine "Business Logic" implementiert. Hat unter Axis2 prima geklappt, nur die generierten Klassen haben mir nicht so gut gefallen wie die von JAXB generierten.



```
/**
 * Please modify this class to meet your needs
 * This class is not complete
 */

package com.mycompany.services;

import java.util.logging.Logger;

import org.apache.cxf.transport.servlet.CXFServlet;

/**
 * This class was generated by Apache CXF 2.2.2
 * Tue Jul 21 09:55:43 CEST 2009
 * Generated source version: 2.2.2
 * 
 */

@javax.jws.WebService(
                      serviceName = "MyService",
                      portName = "LabelServiceHttpSoap12Endpoint",
                      targetNamespace = "http://mycompany.com/services/myservice",
                      wsdlLocation = "file:/N:/workspace/java/cxf-test-service/src/main/webapp/WEB-INF/wsdl/myservice.wsdl",
                      endpointInterface = " com.mycompany.services.MyService")
                      
public class MyServiceImpl extends CXFServlet implements MyService{

    /**
	 * 
	 */
	private static final long serialVersionUID = 7612214873733133739L;
	private static final Logger LOG = Logger.getLogger(LabelQueuingImpl.class.getName());

    /* (non-Javadoc)
     * @see com.mycompany.services.MyService#sendRequest(com.mycompany.services.requestElement  parameters )*
     */
    public com.mycompany.services.MyServiceResponse sendRequest(com.mycompany.services.requestElement parameters) { 
        LOG.info("Executing operation sendRequest");
        System.out.println(parameters);
        try {
            com.eurofinsdna.services.labelservice.DefaultResponse _return = new MyServiceResponse ();
            _return.setResult("HELLO123");
            return _return;
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
    }

}
```



Hier der Standalone Server:
Ich will nix weiter als das genau das selbe unter Tomcat läuft (verwaltet sich besser, monitoring, usw...)

```
package com.mycompany.services;

import javax.xml.ws.Endpoint;

/**
 * This class was generated by Apache CXF 2.2.2
 * Tue Jul 21 09:55:43 CEST 2009
 * Generated source version: 2.2.2
 * 
 */
 
public class MyService_LabelServiceHttpSoap12Endpoint_Server{

    protected MyService_MyServiceHttpSoap12Endpoint_Server() throws Exception {
        System.out.println("Starting Server");
        Object implementor = new LabelQueuingImpl();
        String address = "http://localhost:8080/MyService";
        Endpoint.publish(address, implementor);
    }
    
    public static void main(String args[]) throws Exception { 
        new MyService_MyServiceHttpSoap12Endpoint_Server();
        System.out.println("Server ready..."); 
        
        Thread.sleep(5 * 60 * 1000); 
        System.out.println("Server exiting");
        System.exit(0);
    }
}
```


----------



## Noctarius (21. Jul 2009)

Dazu sage ich jetzt nichts mehr *schon mal ein Brett reicht ums sich gleich gegen den Kopf zu hauen* 

PS-Tipp: Schonmal daran gedacht, dass dein WebService einen Namen haben könnte


----------



## pocketom (21. Jul 2009)

Du meinst serviceName = "MyService" (da stand vorher was anderes drin)? Ich habe um hier zu posten meinen eigenen "echten" Servicenamen immer gegen MyService ersetzt, ebenso wie ich Namespaces anonymisiert habe ;-)

Damit hat es also nichts zu tun falls du das meinst...


@byto: Hab dein Tutorial gerade durchgelesen. Ich checke nochmal web.xml configuration und appContext.xml configuration. Wie schon erwähnt habe ich aber einen völlig anderen Startpunkt. Ich habe ein WSDL File welches einige XSD Files includiert, daraus werden mit CXF-WSDL2Java (via Maven Plugin) die Sources generiert...


----------



## byte (21. Jul 2009)

Nochmal im Klartext: Dein Webservice muss nicht von CXFServlet ableiten...

Es gibt zwei Möglichkeiten, das ganze mit CXF zum Laufen zu bringen:

1. Mit Spring: 
	
	
	
	





```
org.apache.cxf.transport.servlet.CXFServlet
```
 in die web.xml hängen und Spring Konfiguration anlegen (dort wird Dein eigentlicher Service dann verdrahtet). Ein Schritt für Schritt Tutorial gibts hier (den Link hab ich schon vor Ewigkeiten hier gepostet...)

2. Ohne Spring: Eigenes Servlet schreiben und von 
	
	
	
	





```
CXFNonSpringServlet
```
 ableiten. Dort die Methode 
	
	
	
	





```
loadBus()
```
 überschreiben und den eigenen Service programmatisch verdrahten.

Das steht hier doch alles genau beschrieben. Du musst es nur lesen!? :autsch:


----------



## pocketom (21. Jul 2009)

Hab ich wiegesagt alles durch. Ich mache jetzt folgendes:

Project MyService -> Rightclick -> Delete


und dann fang ich nochmal ganz von vorne an... ;-)


----------



## pocketom (21. Jul 2009)

Juhuu, endlich gelöst 

Es lag daran das ich in meinem WSDL File auf externe XSD Files verlinkt habe. Im WSDL waren relative Pfade drin, die wurden unter _WEB-INF/wsdl/xsd/MyService.xsd_ nicht gefunden da leider nur das WSDL vom WAR deployed wurde.

Wie krieg ich meine XSDs jetzt auch noch in das WAR File? Ich mag die nicht jedes Mal händisch in den webapp Folder kopieren...


----------

