Restlet: @Delete kann POJO nicht deserialisieren

Ich baue gerade einen Webservice mit dem Restlet-Framework. Der serverseitige Kram läuft auf einem Tomcat, die Clientseite ist eine JavaFX-App. Ziel soll es sein, ein Pack-/Ladelistenprogramm für ein Messebauunternehmen zu schaffen (deshalb auch das Denglisch, am Anfang ist das noch so, damit ich mit dem zuständigen Menschen kommunizieren kann).
Jetzt zum Problem: Ich habe die Anwendungen jetzt soweit, dass ich Baugruppen erstellen und verändern kann (Methoden @Get & @Put, Ergebnis wird in einer DB gespeichert), aber beim @Delete kann Restlet plötzlich das Baugruppe-Objekt, das ich dem Request mitschicke, nicht mehr deserialisieren. Irgendwie stehe ich gerade vor einer Wand und Google hat mich auch nicht weitergebracht, der Fehler, der bei den aufgelisteten Beiträgen behandelt wird, ist meistens die Verwendung eines falschen externen Serialisierers, den ich ja überhaupt nicht verwende. Die jars, die ich einbinde, sind org.restlet.jar, org.restlet.ext.servlet.jar (nur auf der Serverseite) und die jar mit den Domain-Objekten.
Hier mal mein Code:
POJO


public class Baugruppe implements Serializable
{
	/**
	 * 
	 */
	private static final long serialVersionUID = -742123795806681688L;
	private int id;
	private String name;
	private String description;
	private List<Baugruppe> subBaugruppen = new ArrayList<Baugruppe>();
	private List<Bauteil> bauteile = new ArrayList<Bauteil>();
	
	public Baugruppe()
	{
		this("Name");
	}
	
	public Baugruppe(String name)
	{
		this(name, "Beschreibung");
	}
	
	public Baugruppe(String name, String description)
	{
		setName(name);
		setDescription(description);
	}
	
	

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		if (name.length() > 45)
		{
			IllegalArgumentException iae = new IllegalArgumentException("Name zu lang!");
			throw(iae);
		}
		this.name = name;
	}

	public String getDescription()
	{
		return description;
	}

	public void setDescription(String description)
	{
		if (description.length() > 200)
		{
			IllegalArgumentException iae = new IllegalArgumentException("Beschreibung zu lang!");
			throw(iae);
		}
		this.description = description;
	}
	
	public List<Baugruppe> getSubBaugruppen()
	{
		return subBaugruppen;
	}
	
	public void setSubBaugruppen(List<Baugruppe> list)
	{
		subBaugruppen = list;
	}
	
	public List<Bauteil> getBauteile()
	{
		return bauteile;
	}
	
	public void setBauteile(List<Bauteil> list)
	{
		bauteile = list;
	}
}

Serviceinterface für den dynamischen Proxy:


public interface BaugruppenService
{
	@Get
	public ArrayList<Baugruppe> getBaugruppen();
	@Put
	public void save(Baugruppe baugruppe);
	@Delete
	public void remove(Baugruppe baugruppe);
}

Die Implementierung auf der Serverseite:


public class BaugruppenResource extends ServerResource implements
		BaugruppenService
{

	private void fetchBauteile(Baugruppe bg, ResultSet rs) throws SQLException
	{
		while (rs.next())
		{
			String id = rs.getString("FULL_ID");
			Bauteil bt = new Bauteil(id);
			bt.setName(rs.getString("NAME"));
			bt.setAliasName(rs.getString("ALIAS_NAME"));
			bt.setDescription(rs.getString("DESCRIPTION"));
			bt.setVorhanden(rs.getInt("AVAILABLE"));
			bg.getBauteile().add(bt);
		}
	}

	private String getInsertBaugruppeString(Baugruppe arg0)
	{
		StringBuffer sb = new StringBuffer("INSERT INTO DATA.BAUGRUPPEN (ID, NAME, DESCRIPTION) VALUES (");
		sb.append(arg0.getId() + ", '" + arg0.getName() + "', '" + arg0.getDescription() + "')");
		return new String(sb);
	}

	private String getUpdateBaugruppeString(Baugruppe arg0)
	{
		StringBuffer sb1 = new StringBuffer("UPDATE DATA.BAUGRUPPEN SET NAME='");
		sb1.append(arg0.getName() + "', DESCRIPTION='" + arg0.getDescription() + "' ");
		sb1.append("WHERE ID = " + arg0.getId());
		return new String(sb1);
	}

	private boolean isContained(int id) throws SQLException
	{
		boolean b = false;
		Statement stat = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM DATA.BAUGRUPPEN WHERE ID = " + id;
		DataSource ds = (DataSource) getContext().getAttributes().get("datasource");
		Connection c = ds.getConnection();
		stat = c.createStatement();
		rs = stat.executeQuery(sql);
		if (rs.next())
		{
			b = true;
		}
		stat.close();
		c.close();
		return b;
	}

	@Override
	protected void doInit() throws ResourceException
	{
		Context ctx;
		try
		{
			ctx = new InitialContext();
			Context envCtx = (Context) ctx.lookup("java:comp/env");
			DataSource ds = (DataSource) envCtx.lookup("jdbc/DomainDb");
			Connection conn = ds.getConnection();
			if (conn != null)
			{
				conn.close();
				getContext().getAttributes().put("datasource", ds);
				System.out.println("DataSource erfolgreich erstellt.");
			}
		}
		catch (NamingException | SQLException e)
		{
			e.printStackTrace();
		}
	}

	@Override
	@Get
	public ArrayList<Baugruppe> getBaugruppen()
	{
		ArrayList<Baugruppe> list = new ArrayList<Baugruppe>();
		ArrayList<Baugruppe> subList = new ArrayList<Baugruppe>();
		int bgSize = AppConstants.MAX_SUB_BAUGRUPPEN;
		Statement stat = null;
		ResultSet rs = null;
		String sql = "SELECT * FROM DATA.BAUGRUPPEN";
		String sql2 = "SELECT * FROM DATA.BAUTEILE WHERE BG_ID = ";
		DataSource ds = (DataSource) getContext().getAttributes().get("datasource");
		try
		{
			Connection c = ds.getConnection();
			stat = c.createStatement();
			rs = stat.executeQuery(sql);
			while (rs.next())
			{
				Baugruppe bg = new Baugruppe();
				bg.setId(rs.getInt("ID"));
				bg.setName(rs.getString("NAME"));
				bg.setDescription(rs.getString("DESCRIPTION"));
				if (bg.getId() % bgSize == 0)
				{
					list.add(bg);
				}
				else
				{
					subList.add(bg);
				}
			}
			stat.close();
			c.close();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
		for (Baugruppe bg : list)
		{
			try
			{
				Connection c = ds.getConnection();
				Statement st = c.createStatement();
				ResultSet res = st.executeQuery(sql2 + bg.getId());
				fetchBauteile(bg, res);
				st.close();
				c.close();
			}
			catch (SQLException e)
			{
				e.printStackTrace();
			}
			int id = bg.getId();
			for (Baugruppe bg1 : subList)
			{
				try
				{
					Connection c = ds.getConnection();
					Statement st = c.createStatement();
					ResultSet res = st.executeQuery(sql2 + bg1.getId());
					fetchBauteile(bg1, res);
					st.close();
					c.close();
				}
				catch (SQLException e)
				{
					e.printStackTrace();
				}
				if (bg1.getId() < id + bgSize)
				{
					bg.getSubBaugruppen().add(bg1);
				}
			}
		}
		return list;
	}

	@Override
	@Delete
	public void remove(Baugruppe arg0)
	{
		System.out.println("Mehode remove(Baugruppe bg) des LadelistenService wurde aufgerufen.");
		int id = arg0.getId();
		Statement stat = null;
		String sql = "DELETE * FROM DATA.BAUGRUPPEN WHERE ID = " + id;
		String sql1 = "DELETE * FROM DATA.BAUTEILE WHERE BG_ID = " + id;
		DataSource ds = (DataSource) getContext().getAttributes().get("datasource");
		try
		{
			Connection c = ds.getConnection();
			stat = c.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
			if (stat.executeUpdate(sql) > 0)
			{
				stat.executeUpdate(sql1);
			}
			stat.close();
			c.close();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}

	@Override
	@Put
	public void save(Baugruppe arg0)
	{
		DataSource ds = (DataSource) getContext().getAttributes().get("datasource");
		String sql = null;
		try
		{
			if (isContained(arg0.getId()))
			{
				sql = getUpdateBaugruppeString(arg0);
			}
			else
			{
				sql = getInsertBaugruppeString(arg0);
			}
			Connection c = ds.getConnection();
			Statement stat = c.createStatement();
			if (stat.executeUpdate(sql) > 0)
			{
				this.getResponse().setStatus(Status.SUCCESS_CREATED, "Baugruppe " + arg0.getName() + " in der Datenbank abgelegt.");
			}
			stat.close();
			c.close();
		}
		catch (SQLException e)
		{
			e.printStackTrace();
		}
	}
}

Und der Client:


public class BaugruppenEditor extends StackPane
{
	@FXML
	private GridPane form;
	@FXML
	private TextField nameField;
	@FXML
	private TextField desField;
	@FXML
	private ValidationLED led;
	@FXML
	private TableView<Baugruppe> table;
	@FXML
	private TableColumn<Baugruppe, String> nameColumn;
	@FXML
	private TableColumn<Baugruppe, String> desColumn;
	@FXML
	private Button deleteBtn;
	private ObjectProperty<Baugruppe> current = new SimpleObjectProperty<Baugruppe>();
	
	public BaugruppenEditor()
	{
		FXMLLoader loader  = new FXMLLoader(getClass().getResource("BaugruppenEditor.fxml"));
		loader.setRoot(this);
		loader.setController(this);
		try
		{
			loader.load();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	
	private void bindAndListen()
	{
		IntegerBinding nameBind = new IntegerBinding()
		{
			{
				super.bind(nameField.textProperty());
			}
	
			@Override
			protected int computeValue()
			{
				return nameField.getText().length();
			}
			
		};
		IntegerBinding desBinding = new IntegerBinding()
		{
			{
				super.bind(desField.textProperty());
			}
			
			@Override
			protected int computeValue()
			{
				return desField.getText().length();
			}
			
		};
		BooleanExpression nameEx = nameField.textProperty().isNotEqualTo("")
				.and(nameBind.lessThanOrEqualTo(45));
		BooleanExpression desEx = desField.textProperty().isNotEqualTo("")
				.and(desBinding.lessThanOrEqualTo(200));
		led.validProperty().bind(nameEx.and(desEx));
		table.getSelectionModel().selectedItemProperty().addListener(
				new ChangeListener<Baugruppe>()
		{
			@Override
			public void changed(ObservableValue<? extends Baugruppe> arg0,
					Baugruppe arg1, Baugruppe arg2)
			{
				if (arg2 != null)
				{
					current.set(arg2);
					deleteBtn.setDisable(false);
				}
				else
				{
					deleteBtn.setDisable(true);
				}
			}
		});
		nameColumn.setOnEditCommit(new EventHandler<CellEditEvent<Baugruppe, String>>()
		{
			@Override
			public void handle(CellEditEvent<Baugruppe, String> arg0)
			{
				current.get().setName(arg0.getNewValue());
				updateBaugruppe();
			}			
		});
		desColumn.setOnEditCommit(new EventHandler<CellEditEvent<Baugruppe, String>>()
		{
			@Override
			public void handle(CellEditEvent<Baugruppe, String> arg0)
			{
				current.get().setDescription(arg0.getNewValue());
				updateBaugruppe();
			}
		});
	}

	private int getNextId()
	{
		int val = 0;
		List<Baugruppe> list = table.getItems();
		for (Baugruppe bg : list)
		{
			int id = bg.getId();
			if (id > val)
			{
				val = id;
			}
		}
		val = val + AppConstants.MAX_SUB_BAUGRUPPEN;
		return val;
	}

	private void updateBaugruppe()
	{
		ClientResource cr = new ClientResource("http://hobel:8080/LadelistenService/baugruppe");
		BaugruppenService bs = cr.wrap(BaugruppenService.class);
		bs.save(current.get());
		Response res = Response.getCurrent();
		if (res.getStatus().getCode() == 201)
		{
			System.out.println("Baugruppe erfolgreich geändert.");
		}
	}

	@FXML
	private void initialize()
	{
		table.setMaxWidth(Double.MAX_VALUE);
		nameColumn.setCellFactory(TextFieldTableCell.<Baugruppe> forTableColumn());
		desColumn.setCellFactory(TextFieldTableCell.<Baugruppe> forTableColumn());
		deleteBtn.setDisable(true);
		ClientResource cr = new ClientResource("http://hobel:8080/LadelistenService/baugruppe");
		BaugruppenService bs = cr.wrap(BaugruppenService.class);
		List<Baugruppe> list = bs.getBaugruppen();
		ObservableList<Baugruppe> items = FXCollections.observableArrayList(list);
		table.setItems(items);
		bindAndListen();
	}

	@FXML
	private void addBaugruppe()
	{
		if (led.isValid())
		{
			int id = getNextId();
			String name = nameField.getText();
			String des = desField.getText();
			Baugruppe bg = new Baugruppe(name, des);
			bg.setId(id);
			ClientResource cr = new ClientResource("http://hobel:8080/LadelistenService/baugruppe");
			BaugruppenService bs = cr.wrap(BaugruppenService.class);
			bs.save(bg);
			Response res = Response.getCurrent();
			if (res.getStatus().getCode() == 201)
			{
				table.getItems().add(bg);
			}
		}
	}
	
	@FXML
	private void deleteBaugruppe()
	{
		ClientResource cs = new ClientResource("http://hobel:8080/LadelistenService/baugruppe");
		cs.setRequestEntityBuffering(true);
		BaugruppenService bs = cs.wrap(BaugruppenService.class);
		bs.remove(current.get());
		Response res = Response.getCurrent();
                //Zum Debuggen
		if (res.getStatus().getCode() == 415)
		{
			System.out.println(res.getStatus().getCode());
		}
		
	}
}

Wenn jetzt die Methode deleteBaugruppe auf der Clientseite aufgerufen wird, dann friert das Programm etwa eine halbe Minute ein und es erscheinen folgende Fehlermeldungen:
Client:


java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1440)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28)
	at javafx.event.Event.fireEvent(Event.java:171)
	at javafx.scene.Node.fireEvent(Node.java:6863)
	at javafx.scene.control.Button.fire(Button.java:179)
	at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193)
	at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336)
	at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329)
	at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
	at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
	at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
	at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
	at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
	at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
	at javafx.event.Event.fireEvent(Event.java:171)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3324)
	at javafx.scene.Scene$MouseHandler.process(Scene.java:3164)
	at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3119)
	at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1559)
	at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2261)
	at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:228)
	at com.sun.glass.ui.View.handleMouseEvent(View.java:528)
	at com.sun.glass.ui.View.notifyMouse(View.java:922)
	at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
	at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:29)
	at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:73)
	at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:601)
	at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1437)
	... 49 more
Caused by: Unsupported Media Type (415) - Unsupported Media Type
	at org.restlet.resource.ClientResource.doError(ClientResource.java:612)
	at org.restlet.engine.resource.ClientInvocationHandler.invoke(ClientInvocationHandler.java:236)
	at $Proxy12.remove(Unknown Source)
	at de.jermann.ladelistomat.BaugruppenEditor.deleteBaugruppe(BaugruppenEditor.java:209)
	... 54 more

Server:


WARNING: Unable to convert a [application/x-java-serialized-object] representation into an object of class de.ladeliste.domain.Baugruppe
java.io.IOException: Unable to create the Object representation
	at org.restlet.engine.converter.DefaultConverter.toObject(DefaultConverter.java:277)
	at org.restlet.service.ConverterService.toObject(ConverterService.java:170)
	at org.restlet.resource.Resource.toObject(Resource.java:828)
	at org.restlet.resource.ServerResource.doHandle(ServerResource.java:488)
	at org.restlet.resource.ServerResource.delete(ServerResource.java:176)
	at org.restlet.resource.ServerResource.doHandle(ServerResource.java:439)
	at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:653)
	at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
	at org.restlet.resource.ServerResource.handle(ServerResource.java:952)
	at org.restlet.resource.Finder.handle(Finder.java:246)
	at org.restlet.routing.Filter.doHandle(Filter.java:159)
	at org.restlet.routing.Filter.handle(Filter.java:206)
	at org.restlet.routing.Router.doHandle(Router.java:431)
	at org.restlet.routing.Router.handle(Router.java:648)
	at org.restlet.routing.Filter.doHandle(Filter.java:159)
	at org.restlet.routing.Filter.handle(Filter.java:206)
	at org.restlet.routing.Filter.doHandle(Filter.java:159)
	at org.restlet.routing.Filter.handle(Filter.java:206)
	at org.restlet.routing.Filter.doHandle(Filter.java:159)
	at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:155)
	at org.restlet.routing.Filter.handle(Filter.java:206)
	at org.restlet.routing.Filter.doHandle(Filter.java:159)
	at org.restlet.routing.Filter.handle(Filter.java:206)
	at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
	at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:84)
	at org.restlet.Application.handle(Application.java:381)
	at org.restlet.routing.Filter.doHandle(Filter.java:159)
	at org.restlet.routing.Filter.handle(Filter.java:206)
	at org.restlet.routing.Router.doHandle(Router.java:431)
	at org.restlet.routing.Router.handle(Router.java:648)
	at org.restlet.routing.Filter.doHandle(Filter.java:159)
	at org.restlet.routing.Filter.handle(Filter.java:206)
	at org.restlet.routing.Router.doHandle(Router.java:431)
	at org.restlet.routing.Router.handle(Router.java:648)
	at org.restlet.routing.Filter.doHandle(Filter.java:159)
	at org.restlet.routing.Filter.handle(Filter.java:206)
	at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:211)
	at org.restlet.Component.handle(Component.java:392)
	at org.restlet.Server.handle(Server.java:516)
	at org.restlet.engine.ServerHelper.handle(ServerHelper.java:72)
	at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:152)
	at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1089)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at java.lang.Thread.run(Thread.java:724)
Caused by: java.net.SocketTimeoutException: Read timed out
	at java.net.SocketInputStream.socketRead0(Native Method)
	at java.net.SocketInputStream.read(SocketInputStream.java:150)
	at java.net.SocketInputStream.read(SocketInputStream.java:121)
	at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:461)
	at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:430)
	at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:492)
	at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
	at org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:308)
	at org.apache.coyote.Request.doRead(Request.java:422)
	at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:287)
	at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:407)
	at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:310)
	at org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:202)
	at java.io.FilterInputStream.read(FilterInputStream.java:133)
	at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2308)
	at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2321)
	at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2792)
	at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:799)
	at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
	at org.restlet.representation.ObjectRepresentation.<init>(ObjectRepresentation.java:78)
	at org.restlet.engine.converter.DefaultConverter.toObject(DefaultConverter.java:274)
	... 59 more

Also irgendwie ist mir das zuviel, bei den beiden anderen Methoden klappt alles und hier kann er auf einmal nicht mehr das Objekt deserialisieren? Wer weiss Rat?

Mal kurze Info zum Problem: Es verdichten sich die Anzeichen, das es sich um einen Bug der Version 2.1 handelt, da in den letzten Tagen vermehrt Hilferufe im Netz erscheinen, die dem Meinigen ziemlich ähneln. Ich versuche es mal mit einer niedrigeren Versionsnummer.

So, kein Bug, einfach nur Blödheit von mir: Die @Delete-Methode muss parameterlos sein! Werde das hier als gelöst markieren.