如何在肥皂处理程序中访问@PersistenceUnit私有的实体管理器工厂电动势



我已经实现了SOAPHandler,现在在我的handleMessage方法中,我想将SoapHeader保存到oracle数据库中。

我得到了肥皂标题,如下所示

@Override public boolean handleMessage(SOAPMessageContext context) {

    Boolean outboundProperty = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    if (outboundProperty.booleanValue()) {
        System.out.println("nOutbound message:");
    } else {
        System.out.println("nInbound message:");
        try {
            SOAPMessage     soapMessage     =   context.getMessage();
            SOAPPart        soapPart        =   soapMessage.getSOAPPart();
            SOAPEnvelope    soapEnvelope    =   soapPart.getEnvelope();
            SOAPHeader      soapHeader      =   soapEnvelope.getHeader();
            SOAPBody        soapBody        =   soapEnvelope.getBody();

}

要使用 JPA 将 soapheader 保存在数据库中,我需要肥皂处理程序类中的实体管理器工厂。 我尝试使用 @persistenceunit 但它给出了错误,我的 Soap处理程序类在 Web 应用程序中找不到。

问候伊姆兰

您可以将 XML 消息存储在上下文中,然后将其加载并保存到 Web Service 中的数据库中:

处理器:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
context.getMessage().writeTo(outputStream);
context.put("XML_MESSAGE_PARAM", outputStream.toString());
context.setScope("XML_MESSAGE_PARAM", Scope.APPLICATION);

网络服务:

@Resource
WebServiceContext webContext;
String xmlMessage = (String) webContext.getMessageContext().get("XML_MESSAGE_PARAM");

在处理程序中进行数据库操作不是一个好主意,我只是解析 soapheader 并让它转到 Web 服务并在其中执行数据库任务。

问候伊姆兰

最新更新