Axis2 - Cliententwicklung

Status
Nicht offen für weitere Antworten.

number8

Aktives Mitglied
Hallo zusammen.
Zunächst das Positive, Pojos erstellt, in ein aar-Archiv gepackt und der Service schient auch erreichbar zu sein. Zumindest sagt mir das axis2 imTomcat. Dann flugs die wsdl genriert (Eclipse Plugin) und daraus den Client-Code, ebenfalls wieder mit dem Eclipse Plugin. Klappt auch alles. So, jetzt aber: Welche jars müssen zusätzlich noch eingebunden werden (also ich nehm erstmal alle aus dem axis2-lib)?
Und dann gab es noch Probleme mit dem Build - der funktioniert anscheinend nicht mehr, nachdem ich die jars eingebunden hatte. AxisFault cannot reseloved to a type... oh man, das war mein Sonntagnachmittag :(
 

number8

Aktives Mitglied
Zumindest die obigen Probleme sind wohl nun gelöst, die AutoGen ist mit Vorsicht zu genießen, wenn man Neuling ist, aber hier das nächste Problem:

Exception in thread "main" org.apache.axis2.AxisFault: Exception occurred while trying to invoke service method findHotel
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:486)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:343)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:389)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:211)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
at de.axishotels.HotelServiceStub.findHotel(HotelServiceStub.java:432)
at de.axishotels.AxisHotelAnfrage.main(AxisHotelAnfrage.java:25)

Code:
HotelServiceStub stub = new HotelServiceStub("http://localhost:8080/axis2/services/HotelServiceWS");
		
		// Request erzeugen
		FindHotel findHotel = new FindHotel();
		findHotel.setHotelCode("AX001");
		
		// Service aufrufen
		Hotel hotel = stub.findHotel(findHotel).get_return();
 

Noseman

Neues Mitglied
Wie hast du das Problem denn gelöst? Bei mir kommt der gleiche Error. Ich hab n bisschen gelesen und anscheinend liegts an der service.xml

BTW: Axis läuft, die .aar wird angenommen und Methoden, die nur eine Antwort erfordern (Wenn ich mir ein Array vom Server holen möchte) funktionieren. Nur das Zurücksenden leider nicht.

Fehlermeldung:

org.apache.axis2.AxisFault: java.lang.UnsupportedOperationException: An access occurred that is not valid.
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:517)
at org.apache.axis2.description.RobustOutOnlyAxisOperation$RobustOutOnlyOperationClient.handleResponse(RobustOutOnlyAxisOperation.java:91)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:417)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)


Hab versucht den Bug nach diesem Beitrag ( [#AXIS2-4408] the problem of In-only method with throw exception - ASF JIRA ) zu lösen, allerdings hat es nicht funktioniert.

Der Fehler wird durch die letzte Zeile von diesem Snippet hervorgerufen:

Java:
 try{
            taskArray = as.toTaskArray(tasklist);

            UpdateDB update = new UpdateDB();
            update.setArgs0(taskArray);
            taskStub.updateDB(update);
        }

Die Methode "UpdateDB" hat ein String[] als Parameter und ich versuche mit diesem Aufruf den Parameter zu setzen.

Meine Service.xml sieht so aus:

Java:
<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
    <service name="UserAdministration" scope="application">
        <description>UserAdministration service</description>
        <messageReceivers>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
        </messageReceivers>
        <parameter name="ServiceClass">server.UserAdministration</parameter>	
    </service>
    <service name="TaskAdministration" scope="application">
        <description>TaskAdministration service</description>
        <messageReceivers>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
            <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
        </messageReceivers>
        <parameter name="ServiceClass">server.TaskAdministration</parameter>
		<operation name="updateDB">
			<messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
		</operation>
    </service>
</serviceGroup>


Die Methode, die vom Server aus aufgerufen werden soll kommt aus folgender Klasse:

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package server;


import java.util.HashMap;
import java.util.ArrayList;

import java.lang.Thread;
import java.util.Date;
import java.util.Iterator;

/**
 *
 * @author JD
 */
public class TaskAdministration {

    private static HashMap<Integer, Aufgabe> tasksBU = new HashMap<Integer, Aufgabe>();
    private static HashMap<Integer, Aufgabe> tasksChanged = new HashMap<Integer, Aufgabe>();



    //WORKS
    public static String[] sendTaskList() throws Exception
    {
        tasksBU = TMDatabase.getAllTasks();
        String[] transfer = ArraySerialization.toTaskArray(tasksBU);
        return transfer;
    }

    //Passt Veränderungen an, löscht Tasks und speichert neue Tasks (WORKS)
    public static synchronized void updateDB(String[] changedData) throws Exception
    {
        tasksChanged = ArraySerialization.fromTaskArray(changedData);
        //Hier werden alle neuen Tasks eingepflegt
        ArrayList<Aufgabe> newTasks = new ArrayList<Aufgabe>();

        //SCHRITT 1
        //Trenne neue von veränderten Aufgaben
        Iterator it = tasksChanged.keySet().iterator();

        while(it.hasNext())
        {
            int index = (Integer) it.next();
            Aufgabe a = tasksChanged.get(index);
            if(a.getWorkerOnTask().equals("newTask"))
            {
                a.setWorkerOnTask("Nobody");
                newTasks.add(a);
                tasksChanged.remove(index);
                

            }
        }

        //SCHRITT 2
        //Überprüfe alle Objekte in HashMap auf Veränderungen und übernehme diese in der datenbank
        Iterator it2 = tasksChanged.keySet().iterator();

        //Arbeite alle Tasks ab und verändere DB, wenn nötig
        while(it2.hasNext())
        {
            int index = (Integer) it2.next();
            
            //ID vorhanden => Starte Vergleich
            if(tasksBU.containsKey(index) && tasksChanged.containsKey(index))
            {
                Aufgabe a = tasksBU.get(index);
                Aufgabe b = tasksChanged.get(index);
                if(!a.equals(b))
                {
                    Thread t = new Thread(new server.Threads.ThreadOverrideTObject(index, b));
                    t.start();
                }

            }

            
        }
        Iterator it3 = tasksBU.keySet().iterator();
        while(it3.hasNext())
        {
            int index = (Integer) it3.next();
            //Task gelöscht
            if(tasksBU.containsKey(index) && !tasksChanged.containsKey(index))
            {
                //GOGOGO DROP TASK :)
                Thread t = new Thread(new server.Threads.ThreadDeleteTask(index));
                t.start();
            }
        }
        //SCHRITT 3
        //Speichere alle neuen Tasks ab
        for(int i = 0; i < newTasks.size(); i++)
        {
            Aufgabe a = newTasks.get(i);
            Thread t = new Thread(new server.Threads.ThreadSaveTObject(a));
            t.start();
        }

        //SCHRITT 4
        //gleiche beide Listen wieder aneinander an
        tasksBU = tasksChanged;

    }

    public static void main(String args[])throws Exception
    {
 }


}




Vielleicht kann mir ja jemand helfen.. So langsam geht mir die Zeti aus :)
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Axis2 Dateien lesen und schreiben - Pfade SOA 1
L [AXIS2] OutOfMemory Exception bei Übertragung von größerer Datei via Webservice SOA 3
C SSL in Tomcat mit Axis2 SOA 4
K Axis2 SOAP Logging via Client SOA 2
T Verwendung von Eclipse Projekten im Axis2 Webservice SOA 8
S AXIS2 Webservice: Umgang mit komplexen Datentypen SOA 5
S Axis2 Fault - Wie im Client auslesen? SOA 6
S Axis2 / Rampart - XML-Datei verschlüsseln & versenden SOA 14
J Axis2 und wiederverwenden der Serverobjekte SOA 3
B Axis2 Cipher Suite und Protocol einschränken SOA 2
H Axis2 dynamische URL zu WSDL SOA 2
H Axis2: XML<->DB SOA 2
T Axis2 Problem: leeres Array? SOA 1
S Axis2 MustUnderstand problem mit Boolean SOA 9
F Axis2 große Strings streamen SOA 3
A Axis2 oder 1 Ntlm Authentification SOA 5
J Axis2 und Tomcat SOA 4
T Hat AXIS2 noch Zukunft und wie REST implementieren? SOA 6
R AXIS2 u. Eclipse (Galileo) Fehler bei Serverstart SOA 2
G Stub generieren (WSDL=Axis1.4) (WSDL2JAVA=Axis2) SOA 11
H Axis2 Deployment SOA 5
R SOAP Nachrichtenaustausch zwischen Axis2-WSs SOA 5
S Exception in axis2 java2wsdl ant Task SOA 1
N Request-XML-String -> AXIS2 -> WSDL-Check -> Respon SOA 2
G Axis2 Properties SOA 6
N Axis2: Binärdateien übertragen mit JWS/RPC SOA 2
M Axis2 vs XFire vs JAX-WS SOA 4
N Axis2 - hibernate.cfg.xml - wohin? SOA 6
K Axis2 Service / deploying to Tomcat 5.5.25 / web.xml SOA 5
F Axis2 und Listen SOA 3
I Axis2 mit SSL verschlüsseln SOA 4
G axis2 rampart 1.3 SOA 1
K Webservices mit Axis2 SOA 2

Ähnliche Java Themen

Neue Themen


Oben