Java's serialization is standard,
within Java. If both app are Java apps, and are expected to remain Java apps for a long time, then you'll have no problem there. If one of them is non-Java, then Java's built-in serialization probably won't work (unless there's a library to parse it for whatever language you're using, but I wouldn't want to go down that route).
As for complicated, whatever complexity is has is hidden inside. There are only a couple of classes and methods you need to use for most cases.
It should also be less costly in CPU requirements, memory requirements, and bandwidth requirements than XML, since it doesn't have to transform objects very far out of their natural internal representation, and because
String representations of binary data are almost always bigger than the original, and XML in particular tends to be hugely bloated.
The main 3 reasons to use XML are:
1) If you need different platforms or languages to interact. In your case, this means if one end is not Java.
2) If you need humans to be able to examine the data in its serialized sate. XML serialized objects are not easy to read for humans, but natively serialized objects are pretty much impossible.
3) Java's native serialization is pretty sensitive to changes in the class. Adding or removing fields can screw it up if the versions on both ends don't match. Depending on which particular XML serialization tool you're using, it may be able to gracefully recover from or ignore those differences.