如何在邮件中添加安全标头?

时间:2015-07-08 13:18:55

标签: java soap

我想在JAVA中构建一个简单的soap客户端来调用soap JAVA Web服务。 所以我在我的项目广告中构建了客户端的导入WSDL。因此,如果我尝试运行我的代码,我就有这个错误:

  

AVVERTENZA:无法找到所需的类(javax.activation.DataHandler和javax.mail.internet.MimeMultipart)。附件支持已禁用。   AxisFault    faultCode:{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd} InvalidSecurity    faultSubcode:    faultString:错误:消息中找不到安全标头    faultActor:    faultNode:    faultDetail:       {http://xml.apache.org/axis/} stackTrace:错误:消息中找不到安全标头       在org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)       在org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)       at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)       在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)       在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117).........

问题是:

  

错误:消息中找不到安全标头

我该如何解决这个问题?

EDIT ::

这是我使用的代码:

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");

1 个答案:

答案 0 :(得分:0)

如果您使用Axis2开发客户端,可以使用Rampart,如果没有,您可以添加wsse标头创建并手动添加元素

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

或者您可以使用WSS4J(最佳选择)