As you explained, the JAX-WS endpoint should not implement the finalize method (Check this).
Why?
The finalize method execution is not guaranteed by the JVM. In theory, the finalize method will be called when the object is garbage collected, but when it will be collected? There is no way to know: sometimes it will be collected right away, maybe it will be alive until the JVM stops (this mean never). Actually, this is related to the GC algorithm, and each JVM have its own implementation(s) and each one of them are very different, because there is no specification for the behavior of this algorithm.
But the real problem is that some java programmers doesn't know this, and they use the finalize method as a 'destructor'. An example: You have a class that creates a JDBC connection in its constructor. So, to make it nice you decide to release this connection in the 'destructor' (finalize). Consequence: You do not know when the connection will be closed, or maybe it will never be closed!!!
This is why implementing the finalize method is considered a bad practice for ANY java class and in some frameworks is forbidden to avoid misunderstandings (i.e. JAX-WS).
IMHO, this method should be removed from the Object
API, but it still there ... maybe for backward compatibility or a useful usage that I cannot imagine ;-)
Check this for read more opinions around the finalize implementation.