bircastri
bircastri

Reputation: 2165

How can I add security header in message?

I wanto to built a simple soap client in JAVA to call a soap JAVA web service. So I have import WSDL in my project ad built the client. So if I try to run my code, I have this erro:

AVVERTENZA: Unable to find required classes (javax.activation.DataHandler and javax.mail.internet.MimeMultipart). Attachment support is disabled. AxisFault faultCode: {http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}InvalidSecurity faultSubcode: faultString: ERROR: No security header found in the message faultActor: faultNode: faultDetail: {http://xml.apache.org/axis/}stackTrace:ERROR: No security header found in the message at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222) at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129) at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1782) at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2973) at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606) at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117).........

The problem is:

ERROR: No security header found in the message

How can I fixed this problem?

EDIT::

this is the code thai I use:

String keyStorePath = "C:\\Users\\michele.castriotta\\Desktop\\Certificati\\keystore_healthnetbr.jks";
FileInputStream is = new FileInputStream(keyStorePath);
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(is, "changeit".toCharArray());
String alias = "edotto";

Key key = keystore.getKey(alias, "changeit".toCharArray());

if (key instanceof PrivateKey) {
    // Get certificate of public key
    Certificate cert = keystore.getCertificate(alias);

    // Get public key
    PublicKey publicKey = cert.getPublicKey();

    // Return a key pair
    new KeyPair(publicKey, (PrivateKey) key);
}


AttributiAutorizzativi attributi = new AttributiAutorizzativi("getElencoPAIDomiciliare",
        "HEALTHNETBR","RIS000282");



ElencoPAIDomiciliareRequest criterioRicerca = new ElencoPAIDomiciliareRequest();
criterioRicerca.setDataInizioRiferimento("01/12/2000");
criterioRicerca.setDataFineRiferimento("01/07/2015");
criterioRicerca.setCodiceNazionale("160114");
criterioRicerca.setTipologiaAssistenzaAutorizzata(0);
criterioRicerca.setDistretto("53");


GetElencoPAIDomiciliare request = new GetElencoPAIDomiciliare();
request.setCriteriRicerca(criterioRicerca);

//

PianoAssistenzialeResidenzialeService service = new PianoAssistenzialeResidenzialeServiceLocator();
PianoAssistenzialeResidenziale stub = service.getPianoAssistenzialeResidenzialePort();


PianoAssistenzialeResidenzialeProxy client = new PianoAssistenzialeResidenzialeProxy();
client.getElencoPAIDomiciliare(request, attributi);

System.out.println("done");

Upvotes: 0

Views: 1937

Answers (1)

vzamanillo
vzamanillo

Reputation: 10344

If you are developing your client with Axis2 you can use Rampart, if not, you can add the wsse headers creating and adding the elements manually

SOAPHeader header = context.getMessage().getSOAPPart().getEnvelope().addHeader();
header.addChildElement(securitySOAPElement);

or you can use WSS4J (best choice)

Upvotes: 0

Related Questions