如何在soaphandler中访问@PersistenceUnit私有EntityManagerFactory emf

时间:2011-05-13 08:37:48

标签: java jpa soap

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

我得到了像soapHeader一样的

@覆盖     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在DB中保存soapheader,我需要在soaphandler类中使用entitymanagerfactory。我尝试使用@persistenceunit,但它给出了我在web应用程序中找不到我的soaphandler类的错误。

此致 姆兰

2 个答案:

答案 0 :(得分:1)

您可以在上下文中存储XML消息,然后将其加载并保存到WebService中的DB中:

处理程序:

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

WebService的:

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

答案 1 :(得分:0)

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

此致 姆兰