Hi -
I'm using the CXF 3.1.4 STSClient to write a simple test client for my
CXF-based STS. Requesting tokens has worked as expected, but requesting
validation of a token is having a problem. It would appear that STSClient
creates a proper RST, and gets a proper RSTR from the STS. But something deep
inside the stack is expecting a RequestSecurityTokenResponseCollection instead
of a RequestSecurityTokenResponse, which is causing this exception:
org.apache.cxf.interceptor.Fault: Unexpected element
{http://docs.oasis-open.org/ws-sx/ws-trust/200512}RequestSecurityTokenResponse
found. Expected
{http://docs.oasis-open.org/ws-sx/ws-trust/200512}RequestSecurityTokenResponseCollection.
at
org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.validatePart(DocLiteralInInterceptor.java:280)
at
org.apache.cxf.wsdl.interceptors.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:191)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at
org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:798)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1669)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1550)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1347)
at
org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:56)
at
org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:215)
at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
at
org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:651)
at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308)
at
org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:514)
at
org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:423)
at
org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:324)
at
org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:277)
at
org.apache.cxf.ws.security.trust.AbstractSTSClient.validate(AbstractSTSClient.java:1124)
at
org.apache.cxf.ws.security.trust.STSClient.validateSecurityToken(STSClient.java:105)
at
org.apache.cxf.ws.security.trust.STSClient.validateSecurityToken(STSClient.java:100)
at
gov.faa.iam.sts.IAMSTSTestClient.sendValidateRequest(IAMSTSTestClient.java:242)
at
gov.faa.iam.sts.IAMSTSTestClient.run(IAMSTSTestClient.java:264)
at
gov.faa.iam.sts.IAMSTSTestClient.main(IAMSTSTestClient.java:326)
I really don't want to change the STS at this point to return a RSTRC for
validations. But it's not clear what to change in the STSClient to deal with
the RSTR - there's already code there for handling it, but the execution
doesn't look like it's getting that far. I'm not even sure why it says it's
expecting an RSTRC. Does anyone have any ideas on what might be happening here?
Thanx,
Stephen W. Chappell