I spent a good 50+ hours on trying to consume a Microsoft WCF secure web service with a Java solution. I tried Spring Web Services, Axis2, and looked at Metro/Tango and decided Axis2 was the “easiest” solution. The web service I’m connecting to implements WS-Security, WS-SecureConversation, WS-Policy, WS-Trust and WS-Addressing (at least) and it’s provided through a .NET 3.5 WCF endpoint.
It doesn’t work.
Axis2 can’t handle SpNego which is a WCF closed protocol allowing two WCF machines to negotiate the credentials between them. The client has spent way too much money paying me to continue to figure out a Java solution, so I wrote a .NET 3.5 C# client. Took me literally five lines of code and it’s working. That’s great for .NET developers but a whole lotta horse shit for the rest of the world. I’m hoping Axis2’s Rampart module is updated to play nice with WS-SecureConversation and a .NET WCF web service. Until then, I’m using the .NET client to download the data and I’m storing the SOAP body into a database table. On the Java side, I’m still using JAXB2 to unmarshall the data into Java objects and process it through our existing persistence framework.