簡體   English   中英

缺少soap請求java中的標頭

[英]missing header in soap request java

我已經用純 Java 創建了 SOAP 客戶端。 我還實現了 SOAPHandler 來跟蹤 SOAP 請求和響應。 但是當我看到 sysouts 時,請求中缺少標頭部分。 請注意,我正在調用企業服務,並且需要為要調用的服務提供強制性安全標頭。 我在響應中得到了安全標頭的正確響應,並且正在被 sysout。 來自 SOAPHandler 的空白標頭跟蹤可能有什么問題? 下面是我的處理程序代碼:

public class SOAPLoggingHandler implements SOAPHandler<SOAPMessageContext> {

    private static final Logger log = LoggerFactory.getLogger(SOAPLoggingHandler.class);

    public boolean handleMessage(SOAPMessageContext context) {
        log.info("handleMessage");
        logToSystemOut(context);
        return true;
    }

    public boolean handleFault(SOAPMessageContext context) {
        log.info("SOAP Fault Occur");
        logToSystemOut(context);
        return true;
    }

    public void close(MessageContext context) {
        log.info("close");
    }

    public Set<QName> getHeaders() {
        log.info("getHeaders");
        return null;
    }

    protected void logToSystemOut(SOAPMessageContext smc) {
        final Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
        final String message = !outboundProperty.booleanValue() ? "Web Service Response\n" : "Web Service Request\n";
        logMessage(smc, message);
    }

    protected void logToSystemOut(SOAPMessageContext smc, String message) {
        logMessage(smc, message);
    }

    private void logMessage(SOAPMessageContext smc, String message) {

        try {
            final ByteArrayOutputStream oStream = new ByteArrayOutputStream();
            final Transformer transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");
            transformer.transform(new DOMSource(smc.getMessage().getSOAPPart()), new StreamResult(oStream));
            oStream.close();
            log.info(message + new String(oStream.toByteArray()));
        } catch (final Exception e) {
            log.warn("Failed to log web service message", e);
        }
        //some custom logging going on below - could be ignored
        SomeLogger someLoggerObj = SomeLogger.getInstance();
        try {
            someLoggerObj.logSomeMessage(smc, message);
        } catch (SOAPException e) {
            log.error("SOAP Exception occurred :", e);
        } catch (TransformerException e) {
            log.error("TransformerException Exception occurred :", e);
        }
    }

}

我的標題被視為:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    <SOAP-ENV:Header/>

本周我遇到了完全相同的問題,我有 5 個帶有 TLS 和 SAML 的 SOAP 調用鏈,以及使用 AXIS 和 CXF 實現的混合服務,在 OpenJDK 11 上的相同 Tomcat 9 下運行。該問題僅發生在生產服務器(RedHat 服務器)上,我無法在我的開發機器上重現它,頭文件完全被 java 客戶端刪除,無法在服務器上調試。

我最終在目標服務器上安裝了 JDK 1.8 上的專用 Tomcat 8.5,以運行與 AXIS 服務分離的 CXF 服務。 如果有人有如此復雜的配置,希望這會有所幫助,這不是解決方案,而是一種解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM