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