Would you mind giving me a few pointers? I'm trying things out. I'm told (I can't run it myself) that the message is not getting signed. I'm probably doing something really dumb, but if you could help I would appreciate it. Here's my code:

try  {
    MessageFactory mf = MessageFactory.newInstance();
    SOAPMessage reqMesg = mf.createMessage();
    SOAPMessage response;// = mf.createMessage();
    toSOAPElement(notifyDocketingCompleteRequest, reqMesg);

    String  namespace = cfgProps.getProperty("efm.namespace","");
    String  serviceName = cfgProps.getProperty("efm.serviceName","");
    String  portName = cfgProps.getProperty("efm.portName","");
    String  methodName = cfgProps.getProperty("efm.methodName.nDC","");
    String  endpointAddress = 
cfgProps.getProperty("efm.stageEndpointAddress","");
    String  WS_URL = cfgProps.getProperty("efm.stageWS_URL","");

    URL wsdlLocation =new  URL(WS_URL);
    QName serviceQName =new  QName(namespace, serviceName);
    QName portQName =new  QName(namespace, portName);

    Service service = Service.create(wsdlLocation, serviceQName);
    PortType port=service.getPort(portQName,PortType.class);

    Map<String,Object> interceptorProperties=new  HashMap<>();
    interceptorProperties.put(WSHandlerConstants.ACTION,"Signature");
    
interceptorProperties.put(WSHandlerConstants.SIG_PROP_FILE,"client_sign.properties");

    WSS4JOutInterceptor interceptor=new  
WSS4JOutInterceptor(interceptorProperties);

    Client cxfClient=ClientProxy.getClient(port);
    cxfClient.getOutInterceptors().add(interceptor);

    Dispatch<SOAPMessage> dispatch = service.createDispatch(portQName, 
SOAPMessage.class, Service.Mode.MESSAGE);

    BindingProvider bp = (BindingProvider) dispatch;
    SOAPBinding binding = (SOAPBinding) bp.getBinding();
    bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
endpointAddress);
    binding.setMTOMEnabled(true);

    List<Handler> handlerChain =new  ArrayList<Handler>();
    p.ClientLogicalHandler cAuth =new  p.ClientLogicalHandler();
    p.EnvelopeLoggingSOAPHandler logging =new  p.EnvelopeLoggingSOAPHandler();
    handlerChain.add(cAuth);
    handlerChain.add(logging);
    binding.setHandlerChain(handlerChain);
    // Put it all in the context object
    Map<String,Object> myContext = bp.getRequestContext();

    response = dispatch.invoke(reqMesg);
    ElementNSImpl myResponseElement = (ElementNSImpl) response.getSOAPBody();

    return  myResponseElement;

}  catch  (SOAPException e1){
    e1.printStackTrace();
}  catch  (SOAPFaultException e1){
    SOAPFault fault = e1.getFault();
    e1.printStackTrace();
    return  fault;
}  catch  (Exception wse){
    String  errResponse = wse.getMessage();
    wse.printStackTrace();
    System.out.println(wse);
    Object  response = errResponse;
    return  response;
}


On 2/2/2018 2:55 AM, Colm O hEigeartaigh wrote:
If you want to add an interceptor on the client side, you can do something
like:

Service service = Service.create(wsdlLocation, serviceQName);
PortType port = service.getPort(portQName, PortType.class);
Client cxfClient = ClientProxy.getClient(port);
cxfClient.getOutInterceptors().add(...)

Here's an example:

https://github.com/apache/cxf/blob/dcae47fac2c0e22994572e6744852070737223e5/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/ut/UsernameTokenTest.java#L439

Colm.

On Thu, Feb 1, 2018 at 9:07 PM, George S. <[email protected]> wrote:

I apologize for the really basic level of my question. I've looked at the
docs and I'm really not figuring out how to do this. I'm adapting some code:

import javax.xml.ws.Service;

URL wsdlLocation =new  URL(WS_URL);
QName serviceQName =new  QName(namespace, serviceName);
QName portQName =new  QName(namespace, portName);
Service service = Service.create(wsdlLocation, serviceQName);

and I'm desperately trying to figure out how to get an Endpoint so I can
add an Interceptor. If I have the service ( which from looking at the code
for javax.xml.ws.Service is created by a Provider()), how can I get to the
endpoint?

I've looked at:

http://cxf.apache.org/docs/ws-security.html

and in the section labelled "Adding the interceptors via the API", the
example shows passing in a "myServiceImpl".

What are the steps to go through for creation of a "myServiceImpl"? What
are class is "myServiceImpl", and how is one obtained?

Again, I apologize if these questions for the basic nature of my questions.



--
George S.
*MH Software, Inc.*
Voice: 303 438 9585
http://www.mhsoftware.com




--
George S.
*MH Software, Inc.*
Voice: 303 438 9585
http://www.mhsoftware.com

Reply via email to