# Axis2 - Cliententwicklung



## number8 (9. Mrz 2008)

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 (9. Mrz 2008)

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)


```
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();
```


----------



## number8 (13. Mrz 2008)

Hat sich erledigt


----------



## Noseman (14. Sep 2009)

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:


```
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:


```
<?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:


```
/*
 * 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


----------

