Java for soap is quite extensive and generally works extremely well. We have used it in many places with good results. The only major problem is, as you discovered, trying to deal with discrepancies when calling complex services designed specifically for .NET.