Reputation: 2165
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
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