![]() |
|
| #1 (permalink) | |
|
Benutzer
int
Registriert seit: 06.12.2005
Fachbeiträge: 60
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Hallo,
ich habe einen Web-Client für das Google-WebService geschrieben mit Apache Axis. Also mit wsdl2java die klassen generiert und funktioniert auch tadellos. Ein kleiner Ausschnitt aus dem Client: Code:
GoogleSearchService service = new GoogleSearchServiceLocator(); // Now use the service to get a stub to the Service Definition Interface (SDI) GoogleSearchPort google = service.getGoogleSearchPort(); GoogleSearchResult googleSearchResult = google.doGoogleSearch(GOOGLE_KEY, // java.lang.String key q.toString(), //java.lang.String q 0, // int start 10, // int maxResults false, //boolean filter "", // java.lang.String restrict false, //boolean safeSearch "lang_ja|lang_en", // java.lang.String lr "UTF-8", // java.lang.String ie "UTF-8"); // java.lang.String oe [java] Exception in thread "main" java.rmi.ServerError: Unexpected Error; nested exception is: [java] java.lang.NoClassDefFoundError: GoogleSearch/GoogleSearchService Jedoch sind die notwendigen Klassen, wie GoogleSearchService, etc. ganz sicher im classpath, also die Klassen sind sicher verfügbar. Und der Code funktioniert auch, habe es ja im Rahmen des Web-Clients ausprobiert. Weiß da jemand weiter? Gibts irgendwas auf das man achten muss wenn man in einem SessionBean einen WebService in Anspruch nimmt?? mfg leni |
|
|
| #4 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 06.12.2005
Fachbeiträge: 60
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Hallo,
ich verwenden den JBoss-Server 4.0.3 und mein Ant-build file sieht folgendermaßen aus, da sieht man auch dass ich beim ausführen des clients (java) den classpath angebe: (Im lib-Verzeichnis meines Eclipse-Projekts sind alle notwendigen jars, also die apache-axis-jars und das jar, das die vom wsdl-file generierten Klassen enthält) Code:
<?xml version="1.0"?>
<project name="myapp" basedir="." default="run-client">
<target name="init">
<!--
Set the following three properties at command line, e.g.:
ant -Dtestapp=MyTstApp -Djarfile=MyApp.jar -Dpackage=mypackage
<property name="testapp" value="..." />
<property name="jarfile" value="..." />
<property name="package" value="..." />
-->
<property name="src.dir" value="${basedir}/src" />
<property name="classes.dir" value="${basedir}/bin" />
<property name="jboss.client.dir" value="C:\Programme\jboss-4.0.3\client" />
<property name="jboss.deploy.dir" value="C:\Programme\jboss-4.0.3\server\default\deploy" />
<property name="testapp" value="google.client.GoogleSessionClient" />
<property name="jarfile" value="GoogleBean.jar" />
<property name="package" value="google/ejb" />
<property name="lib" value="${basedir}/lib"/>
<path id="project.class.path">
<fileset dir="${lib}">
<include name="**/*.jar" />
</fileset>
</path>
</target>
<target name="compile" depends="init">
<mkdir dir="${classes.dir}" />
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="project.class.path" debug="true" deprecation="true">
<classpath>
<fileset dir="${jboss.client.dir}">
<include name="**/*.jar" />
<include name="task1.jar"/>
</fileset>
<pathelement path="${lib}"/>
<pathelement location="**/*.jar"/>
</classpath>
</javac>
</target>
<target name="jar" depends="init,compile">
<jar jarfile="${jarfile}">
<metainf dir="${src.dir}/${package}" includes="**/*.xml" />
<fileset dir="${classes.dir}">
<include name="${package}/*.class" />
</fileset>
</jar>
</target>
<target name="deploy" depends="jar">
<copy todir="${jboss.deploy.dir}">
<fileset dir="${src.dir}/${package}">
<include name="*-service.xml" />
</fileset>
</copy>
<copy todir="${jboss.deploy.dir}" file="${jarfile}" />
</target>
<target name="undeploy" depends="init">
<delete file="${jboss.deploy.dir}/${jarfile}" />
</target>
<target name="clean" depends="init" description="Clean all build products.">
<delete>
<fileset dir="${classes.dir}">
<include name="**/*.class" />
</fileset>
</delete>
<delete file="${jarfile}" />
</target>
<target name="all" depends="init,jar,deploy" description="Build everything.">
<echo message="Application built." />
</target>
<target name="run-client" depends="all">
<java fork="true" classname="${testapp}" classpathref="project.class.path">
<classpath>
<fileset dir="${jboss.client.dir}">
<include name="**/*.jar" />
</fileset>
<pathelement path="." />
<pathelement path="${classes.dir}" />
<pathelement path="${env.CLASSPATH}" />
<pathelement path="${lib}"/>
<pathelement location="**/*.jar"/>
</classpath>
</java>
</target>
</project>
![]() leni [/code] |
|
|
| #8 (permalink) | ||||||||||||||||
|
Nicht angemeldet
Fachbeiträge: n/a
|
Sorry, ich meinte die generierten Klassen für den Zugriff auf die Google-Servicesund alles, was dazu gehört (axis.jar etc.). Kopiere die Google-Klassen nach jboss3/server/default/lib, dann sind sie für jede App verfügbar. Bei den 3.x Versionen von JBoss ist die Deployment-Reihenfolge wichtig gewesen, wenn man Jar's deployd. z.B. a.jar wird vor b.jar deployd so dass die Klassen aus b.jar für a.jar unbekannt sind. Eine Möglichkeit ist die komplette Application als EAR zu deployen oder einen Präfix vor die Daeinamen der Jar-Dateien zu setzen. z.B. 0b.jar, a.jar. Damit wird 0b.jar zuerst deployed und ist für a.jar bekannt. Siehe dazu <attribute name="URLComparator">org.jboss.deployment.scanner.PrefixDeploymentSorter</attribute> in jboss#/server/default/conf/jboss-service.xml Ich hoffe es hilft. JBoss 4 habe ich noch nocht ausprobiert, da ich leider bisher keine Zeit dazu hatte. |
|||||||||||||||
| #9 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 06.12.2005
Fachbeiträge: 60
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
okay danke jetzt hat es funktioniert
gott sei dank!Eine Frage hätte ich da jetzt noch: Ich habe das SessionBean nun als WebService deployed mit Apache Axis, jedoch muss ich dazu immer die class-files in ein von mir angelegtes classes-verzeichnis unter der webapps/axis im jboss-deploy Verzeichnis geben. Ist das normal? - sonst findet er die Klassen leider nicht....gibts da noch eine andere Möglichkeit??
|
|
|
| #10 (permalink) | |
|
Nicht angemeldet
Fachbeiträge: n/a
|
Du brauchst nur einen Deployment Descriptor über den AdminService in Axis
zu deployen, wenn ich mich recht erinnere. z.B. Code:
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance">
<service name="TranslationService" provider="java:EJB">
<parameter name="beanJndiName" value="TranslationEJB"/>
<parameter name="homeInterfaceName" value="package.TranslationHome"/>
<parameter name="remoteInterfaceName" value="package.TranslationRemote"/>
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="package.TranslationBean"/>
</service>
</deployment>
|
| #11 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 06.12.2005
Fachbeiträge: 60
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Ja das ist klar, habe ich auch gemacht, nur wenn die entsprechenden KLassen (SessionBean, Home und Remote-Interface) nicht im classes Verzeichnis vom webapps/axis verzeichnis vom jobss liegen findet er die klassen nicht.....?
|
|
|
| #13 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 06.12.2005
Fachbeiträge: 60
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Hi,
mir ist nicht ganz klar, auf was du hinauswillst?? - Ich habe folgendes Verzeichnis im jboss C:\Programme\jboss-4.0.3\server\default\deploy\webapps\axis.war\WEB-INF\classes definiert (bzw. das axis.war musst man sowieso definieren damit axis funktioniert, WEB-INF und classes habe ich selbst dazudefiniert) und dann einfach hier die packages reingestellt, damit er wenn ich das sessionbean als web service deployed habe und im browser ansehen möchte auch die klassen findet, das funktioniert auch, aber ich bin mit der Lösung gar nicht zufrieden.... (Weißt du eine elegantere Methode sagen??? lg leni |
|
|
| #14 (permalink) | |
|
Stammbenutzer
Megabyte
Registriert seit: 19.07.2004
Fachbeiträge: 1.467
Abgegebene Danke: 8
Erhielt 56 Danke für 56 Beiträge
|
Ich muss komischer Weise das selbe zur Zeit auch machen... GoogleSearchService erstellen... in Bean packen... als Web-Service deployn....
Hab mir mal die Klassen mit wscompile generiert, hab gelesen dass sich JBoss nicht wirklich gut mit axis verträgt. Hab die generierten Klassen in ein jar gepackt und ins jboss/lib/endorsed verzeichnis gegeben. Wenn ich jedoch die Methode von meinem Bean aufrufen will reißt es den JBoss komplett nieder, bekomm leider keinerlei Stacktrace am Server. Auch wenn ich das GoogleService am Client verwenden möchte bekomm ich einen Verfication-Error oder irgend sowas ähnliches. Womit kann das zusammen liegen? |
|
|
| #15 (permalink) | |
|
Benutzer
int
Themenstarter
Registriert seit: 06.12.2005
Fachbeiträge: 60
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
|
Nein, also ich hatte noch keine Probleme mit Axis und JBoss und überhaupt ist die Erstellung mit Axis um einiges leichter und angenehmer als mit dem JWSDP.
@Gast: Was meinst du zu meiner Lösung, gibt es da keinen eleganteren Weg? - mit einem jar-file oder so? danke im voraus leni |
|
|
|
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Problem mit Webservice | Netzwerkprogrammierung | 5 | 12.10.2007 11:14 | |
| locale SessionBean über remote SessionBean aufrufen | ElHombre | Allgemeines EE | 0 | 30.09.2007 10:34 |
| WebService mittels SessionBean aufrufen? | harry | Allgemeines EE | 7 | 05.05.2007 15:25 |
| Problem mit WebService | _VisioN_ | Netzwerkprogrammierung | 0 | 28.02.2006 20:22 |
| Web-Client - SessionBean - WebService | leni | Allgemeines EE | 2 | 15.12.2005 00:14 |
| Lesezeichen |
|
|