Hi Stepan,

Today we tried to set all the addressing properties and were getting the
response from the STS client. Now we are getting Body not encrypted and not
signed . I will be debugging that issue.

I have few questions in the implementation. We are going with the dispatch
API and for the STS client , I could not find an example how we can set it .
Please check my code and let us know how we can achieve it with Dispatch
API. We are using the sample wsdl given in CXF  sample .

package com.cxf.sample;
import static
org.apache.cxf.ws.addressing.JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConstants;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.ws.Dispatch;
import javax.xml.ws.soap.SOAPBinding;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.DispatchImpl;
import org.apache.cxf.ws.addressing.AddressingProperties;
import org.apache.cxf.ws.addressing.AttributedURIType;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.apache.cxf.ws.addressing.MetadataType;
import org.apache.cxf.ws.addressing.ObjectFactory;
import org.apache.cxf.ws.addressing.ReferenceParametersType;
import org.apache.cxf.ws.addressing.RelatesToType;
import org.apache.cxf.ws.addressing.impl.AddressingPropertiesImpl;
import org.apache.cxf.ws.addressing.impl.MAPAggregatorImpl;
import org.apache.cxf.ws.addressing.soap.MAPCodec;
import org.apache.cxf.ws.policy.PolicyConstants;
import org.apache.cxf.ws.security.trust.STSClient;
import org.apache.neethi.Policy;


public class TestCXFSTS {
        private static final ObjectFactory WSA_OBJECT_FACTORY = new
ObjectFactory();

        /**
         * @param args
         * @throws SOAPException
         * @throws IOException
         */
        public static void main(String[] args) throws IOException, 
SOAPException {
                testService1();
        }

        private static void testService1() throws FileNotFoundException,
                        IOException, SOAPException {
                Dispatch<SOAPMessage> dispatch = CXFUtils.getDispatch(
                                SOAPBinding.SOAP11HTTP_BINDING,
                                "http://127.0.0.1:9989/SoapContext/SoapPort";);
                Client client = ((DispatchImpl<SOAPMessage>) 
dispatch).getClient();


                //engage addressing interceptors
                MAPCodec mapCodec = new MAPCodec();
                MAPAggregatorImpl mapAggregator = new MAPAggregatorImpl();
                client.getOutInterceptors().add(mapCodec);
                client.getOutInterceptors().add(mapAggregator);
                client.getInInterceptors().add(mapCodec);
                client.getInInterceptors().add(mapAggregator);
                
                Policy wsaPolicy = PolicyHelper.parsePolicy(client, 
"c://wsa-policy.xml");
                Policy policy = PolicyHelper.parsePolicy(client, 
"c://wsa-policy2.xml");
                Policy policy2 = PolicyHelper.parsePolicy(client, 
"c://wsa-policy3.xml");
                wsaPolicy.merge(policy);
                wsaPolicy.merge(policy2);
                dispatch.getRequestContext().put(CLIENT_ADDRESSING_PROPERTIES,
                                createMaps());
                
dispatch.getRequestContext().put(PolicyConstants.POLICY_OVERRIDE,
wsaPolicy);
                Map<String,Object> stsmap = setSTSMaps();
                client.getRequestContext().putAll(stsmap);
                STSClient sts = new STSClient(client.getBus());
                sts.setServiceQName(new
QName("http://docs.oasis-open.org/ws-sx/ws-trust/200512/","SecurityTokenService";));
                sts.setEndpointQName(new
QName("http://docs.oasis-open.org/ws-sx/ws-trust/200512/","UT_Port";));
        
*sts.setWsdlLocation("http://localhost:9999/SecurityTokenService/UT?wsdl";);*
                sts.setEnableAppliesTo(false);
                client.getRequestContext().put("ws-security.sts.client", sts );
                Map<String, Object> stsprop = new HashMap<String, Object>() ;
                stsprop.put("ws-security.username","alice");
        
stsprop.put("ws-security.callback-handler","com.cxf.sample.ClientCallbackHandler");
        
stsprop.put("ws-security.encryption.properties","clientKeystore.properties");
                stsprop.put("ws-security.encryption.username","mystskey");
                stsprop.put("ws-security.sts.token.username","myclientkey");
        
stsprop.put("ws-security.sts.token.properties","clientKeystore.properties");
                stsprop.put("ws-security.sts.token.usecert","false");           
                sts.setUseCertificateForConfirmationKeyInfo(true);
                sts.getProperties().putAll(stsprop);
                MessageFactory mf =
MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL);
                SOAPMessage request = mf.createMessage();
                SOAPPart part = request.getSOAPPart();

                // Obtain the SOAPEnvelope and header and body elements.
                SOAPEnvelope env = part.getEnvelope(); 
                SOAPBody body = env.getBody();

                // Construct the message payload.
                SOAPElement operation = body.addChildElement("greetMe", "tns",
                 "http://apache.org/hello_world_soap_http/types";);
                SOAPElement value = operation.addChildElement("requestType",
"tns","http://apache.org/hello_world_soap_http/types";);
                value.addTextNode("Renu");
                request.saveChanges();
                SOAPMessage response = dispatch.invoke(request);
                System.out.println(response);
                
                
        }

        private static Map<String,Object> setSTSMaps(){
                
                Map<String,Object> stsmap = new HashMap<String, Object>();
                stsmap.put("ws-security.signature.properties",
"clientKeystore.properties");
                stsmap.put("ws-security.signature.username", "myclientkey");
                stsmap.put("ws-security.callback-handler",
"com.cxf.sample.ClientCallbackHandler");
                stsmap.put("ws-security.encryption.properties",
"clientKeystore.properties");
                stsmap.put("ws-security.encryption.username", "myservicekey");  
        
                return stsmap;
                
        }

        
        private static AddressingProperties createMaps() {
                
                // get Message Addressing Properties instance
                AddressingProperties maps = new AddressingPropertiesImpl();
                // set MessageID property
                AttributedURIType messageID = WSA_OBJECT_FACTORY
                                .createAttributedURIType();
                AttributedURIType action = 
WSA_OBJECT_FACTORY.createAttributedURIType();                
                messageID.setValue("urn:uuid:" + System.currentTimeMillis());   
        
                AttributedURIType to = 
WSA_OBJECT_FACTORY.createAttributedURIType();
                to.setValue("http://www.w3.org/2005/08/addressing";);    
                EndpointReferenceType toRefType =
WSA_OBJECT_FACTORY.createEndpointReferenceType();
                toRefType.setAddress(to);
                EndpointReferenceType fault =
WSA_OBJECT_FACTORY.createEndpointReferenceType();
                AttributedURIType faultTo = 
WSA_OBJECT_FACTORY.createAttributedURIType();
                faultTo.setValue("http://www.w3.org/2005/08/addressing";);
                fault.setAddress(faultTo);
                EndpointReferenceType reply =
WSA_OBJECT_FACTORY.createEndpointReferenceType();
                AttributedURIType replyTo = 
WSA_OBJECT_FACTORY.createAttributedURIType();
                replyTo.setValue("http://www.w3.org/2005/08/addressing";);
                reply.setAddress(replyTo);
                EndpointReferenceType relates =
WSA_OBJECT_FACTORY.createEndpointReferenceType();
                AttributedURIType relatesTo =
WSA_OBJECT_FACTORY.createAttributedURIType();
                relatesTo.setValue("http://www.w3.org/2005/08/addressing";);
                relates.setAddress(relatesTo);
                action.setValue("http://www.w3.org/2005/08/addressing";);
                maps.setTo(toRefType);
                maps.setTo(to);
                maps.setAction(action);
                maps.setMessageID(messageID);
                maps.setFaultTo(fault);
            RelatesToType rel = WSA_OBJECT_FACTORY.createRelatesToType();   
            rel.setRelationshipType("http://www.w3.org/2005/08/addressing";);
            rel.setValue("http://www.w3.org/2005/08/addressing";);
                maps.setRelatesTo(rel );
                maps.setReplyTo(reply);
                ReferenceParametersType value =
WSA_OBJECT_FACTORY.createReferenceParametersType();
                value.getAny().add("http://www.w3.org/2005/08/addressing";);
                MetadataType value1 = WSA_OBJECT_FACTORY.createMetadataType();
                value1.getAny().add("http://www.w3.org/2005/08/addressing";);
                return maps;
        }

}

So in the above code we wont to go away with the
sts.setWsdlLocation("http://localhost:9999/SecurityTokenService/UT?wsdl";); .
I tried to use the
dispatch.getRequestContext().put(PolicyConstants.POLICY_OVERRIDE,
wsaPolicy); but it didnt worked. 

Your help is appreciated. Thanks



--
View this message in context: 
http://cxf.547215.n5.nabble.com/Issue-with-STS-using-Dispatch-API-tp5739874p5739953.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to