WebService RPC Calendar übergeben

xxsaikoxx

Grünschnabel
Ich sitze jetzt schon ne Weile an einem Problem:
Ich habe mir einen Webservice geschrieben, der mir zwei Methoden bereitstellt. Die eine Methode bekommt nur einen String und die andere einen String und ein Calendar Objekt. Nun ist es ja so, das ein Calendar Objekt zu einem xsd:dateTime wird. Das funktioniert soweit auch alles. Doch wenn ich mir die Client-Klassen mit wsimport erstellen lasse, verlangt die Methode einen XMLGregorianCalendar. Diesen habe ich mir auch erstellt und übergebe ihn der Methode. Jedoch bekomme ich immer einen Fehler:
Code:
Exception in thread "main" javax.xml.ws.WebServiceException: java.lang.NullPointerException
	at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:163)
	at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:74)
	at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:581)
	at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:540)
	at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:525)
	at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:422)
	at com.sun.xml.internal.ws.client.Stub.process(Stub.java:235)
	at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:120)
	at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:230)
	at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
	at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
	at $Proxy31.getFreeRoomsAtTime(Unknown Source)
	at de.saiko.client.Client.main(Client.java:32)
Caused by: java.lang.NullPointerException
	at com.sun.xml.internal.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$12.printNumber(RuntimeBuiltinLeafInfoImpl.java:546)
	at com.sun.xml.internal.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$12.format(RuntimeBuiltinLeafInfoImpl.java:500)
	at com.sun.xml.internal.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$12.print(RuntimeBuiltinLeafInfoImpl.java:467)
	at com.sun.xml.internal.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$12.print(RuntimeBuiltinLeafInfoImpl.java:459)
	at com.sun.xml.internal.bind.v2.model.impl.RuntimeBuiltinLeafInfoImpl$StringImpl.writeLeafElement(RuntimeBuiltinLeafInfoImpl.java:121)
	at com.sun.xml.internal.bind.v2.runtime.SchemaTypeTransducer.writeLeafElement(SchemaTypeTransducer.java:57)
	at com.sun.xml.internal.bind.v2.runtime.reflect.TransducedAccessor$CompositeTransducedAccessorImpl.writeLeafElement(TransducedAccessor.java:214)
	at com.sun.xml.internal.bind.v2.runtime.property.SingleElementLeafProperty.serializeBody(SingleElementLeafProperty.java:62)
	at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:286)
	at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:663)
	at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:250)
	at com.sun.xml.internal.bind.v2.runtime.BridgeImpl.marshal(BridgeImpl.java:64)
	at com.sun.xml.internal.bind.api.Bridge.marshal(Bridge.java:105)
	at com.sun.xml.internal.ws.message.jaxb.JAXBMessage.writePayloadTo(JAXBMessage.java:296)
	at com.sun.xml.internal.ws.message.AbstractMessageImpl.writeTo(AbstractMessageImpl.java:128)
	at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.encode(StreamSOAPCodec.java:94)
	at com.sun.xml.internal.ws.encoding.SOAPBindingCodec.encode(SOAPBindingCodec.java:251)
	at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:130)
	... 12 more
Der Methodenaufruf ohne den Calendar geht jedoch einwandfrei. Gehe ich hier irgendwie falsch ran?

Vielen Dank im Voraus!

Gruß
saiko
 
Um es vielleicht etwas ausführlicher zu beschreiben:
Die Methode im WebService sieht so aus:
Java:
@WebMethod(action = "getFreeRoomsAtTime")
@WebResult(name = "listOfRooms")
 public List<Room> getFreeRoomsAtTime(@WebParam(name="location")String location, @WebParam(name="building")String building, @WebParam(name="time")Date time){...}
Dann lasse ich wsgen und wsimport laufen. Auf der Clientseite versuche ich dann mit folgendem Code den Service zu nutzen:
Java:
public class Client {
    public static void main(String args[]) {

        RoomWebServiceService service = new RoomWebServiceService();
        RoomWebService test = service.getRoomWebServicePort();

        DatatypeFactory d = null;

        try {
            d = DatatypeFactory.newInstance();
        } catch (DatatypeConfigurationException e) {
            e.printStackTrace();
        }

        XMLGregorianCalendar cal = d.newXMLGregorianCalendarTime(20, 20, 19, 1, 1);
        List<Room> list2 = test.getFreeRoomsAtTime("A112", "spl", cal);
  }
}
Die im ersten Posting gezeigte Exception fliegt dann in Zeile 16.
Ich hoffe jetzt findet jemand den Fehler.

Gruß

saiko
 
Hab es jetzt anscheinend hinbekommen:
Nun hole ich mir den Calendar so:
Java:
XMLGregorianCalendar cal = d.newXMLGregorianCalendar(new GregorianCalendar());
Damit funktioniert es. Sehr komisch.
 

Neue Beiträge

Zurück