2013-06-12 15 views
6

Tôi đang cố gắng triển khai trang web jsp của mình trên máy chủ web của Oracle, nhưng khi tôi gọi dịch vụ web của mình bằng cổng, tôi nhận được lỗi sau: SEVERE : SAAJ0120: không thể thêm một tiêu đề khi một người đã hiện diệnSEVERE: SAAJ0120: Không thể thêm tiêu đề khi đã có mặt

Đây là mã cho HeaderHandler tôi

  public boolean handleMessage(SOAPMessageContext smc) { 

        Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 

        if (outboundProperty.booleanValue()) { 


         SOAPMessage message = smc.getMessage(); 
         SOAPEnvelope envelope = null; 
         SOAPHeader header = null; 

         try { 

          envelope = smc.getMessage().getSOAPPart().getEnvelope(); 
          header = envelope.addHeader(); 

          SOAPElement security = 
            header.addChildElement("Security", "wsse", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"); 
                       //http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd 
          SOAPElement BinarySecurityToken = 
            security.addChildElement("BinarySecurityToken", "wsse"); 
          BinarySecurityToken.addAttribute(new QName("xmlns:wsu"), "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"); 

          //EncodingType="SSHA" ValueType="AccessManagerSSOSecurityToken" wsu:Id="OAMToken" 

          BinarySecurityToken.addAttribute(new QName("EncodingType"), "SSHA"); 
          BinarySecurityToken.addAttribute(new QName("ValueType"), "AccessManagerSSOSecurityToken"); 
          BinarySecurityToken.addAttribute(new QName("wsu:Id"), "OAMToken"); 

          BinarySecurityToken.addTextNode(token); 
          //message.writeTo(System.out); 
          //System.out.println(""); 

         } catch (Exception e) { 
          try { 
           header = envelope.addHeader(); 
          } catch (SOAPException e1) { 
           e1.printStackTrace(); 
          } 
          //e.printStackTrace(); 
         } 

        } else { 
         try { 

          //This handler does nothing with the response from the Web Service so 
          //we just print out the SOAP message. 
          SOAPMessage message = smc.getMessage(); 
          //message.writeTo(System.out); 
          //System.out.println(""); 

         } catch (Exception ex) { 
          ex.printStackTrace(); 
         } 
        } 


        return outboundProperty; 

       } 

EDIT:

lỗi này là

  com.sun.xml.internal.messaging.saaj.soap.impl.EnvelopeImpl addHeader 
      SEVERE: SAAJ0120: Can't add a header when one is already present 
      com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Can't add a header when one is already present. 
        at com.sun.xml.internal.messaging.saaj.soap.impl.EnvelopeImpl.addHeader(EnvelopeImpl.java:114) 
        at com.sun.xml.internal.messaging.saaj.soap.impl.EnvelopeImpl.addHeader(EnvelopeImpl.java:94) 
        at com.standardandpoors.wso.HeaderHandler.handleMessage(HeaderHandler.java:33) 
        at com.standardandpoors.wso.HeaderHandler.handleMessage(HeaderHandler.java:1) 
        at com.sun.xml.ws.handler.HandlerProcessor.callHandleMessage(HandlerProcessor.java:297) 
        at com.sun.xml.ws.handler.HandlerProcessor.callHandlersRequest(HandlerProcessor.java:138) 
        at com.sun.xml.ws.handler.ClientSOAPHandlerTube.callHandlersOnRequest(ClientSOAPHandlerTube.java:144) 
        at com.sun.xml.ws.handler.HandlerTube.processRequest(HandlerTube.java:115) 
        at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:892) 
        at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:841) 
        at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:804) 
        at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:706) 
        at com.sun.xml.ws.client.Stub.process(Stub.java:385) 
        at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:189) 
        at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:119) 
        at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:102) 
        at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:172) 
        at $Proxy125.findUserById(Unknown Source) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:597) 
        at weblogic.wsee.jaxws.spi.ClientInstanceInvocationHandler.invoke(ClientInstanceInvocationHandler.java:84) 
        at $Proxy120.findUserById(Unknown Source) 
        at com.standardandpoors.wso.IdmWSUtil.findUserById(IdmWSUtil.java:44) 
        at com.standardandpoors.idm.controller.JspRedirectionController.forgotPassword(JspRedirectionController.java:123) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
        at java.lang.reflect.Method.invoke(Method.java:597) 
        at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175) 
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:421) 
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:409) 
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:774) 
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:751) 
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:844) 
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242) 
        at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216) 
        at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132) 
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:338) 
        at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:221) 
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3284) 
        at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254) 
        at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
        at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
        at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
        at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163) 
        at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089) 
        at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074) 
        at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1513) 
        at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254) 
        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) 
        at weblogic.work.ExecuteThread.run(ExecuteThread.java:221) 

EDIT: Sự cố xảy ra khi sử dụng JDK 1.8, không phải trong 1.7

+0

đâu trong mã của bạn là ngoại lệ xảy ra? Bạn có thông tin bổ sung từ ngoại lệ mà bạn có thể cung cấp không? – STLDeveloper

+0

@STLDeveloper Ngoại lệ là tại dòng: header = envelope.addHeader(); Tôi sẽ thêm đầu ra của bàn điều khiển làm bản chỉnh sửa cho câu hỏi. – sharmakeshav

+1

Đó là sai lầm của tôi. Tôi không thấy sự phụ thuộc giữa hai dòng. Bạn có đang thiếu thứ gì đó trong cuộc gọi đến envelope.addHeader() không? – STLDeveloper

Trả lời

8

Tôi cuối cùng cũng có thể giải quyết vấn đề. Tôi chỉ cần thêm một điều kiện nếu để kiểm tra xem tiêu đề là NULL hay không, nếu nó là NULL chỉ sau đó tôi đã thêm tiêu đề khác tiếp tục với chương trình. Điều này phù hợp với tôi!

  if(header == null){ 
       header = envelope.addHeader(); 
       } 
+0

Bạn có thấy lý do tại sao nó chạy ok trong Java 7 và không phải trong Java 8? – PhoneixS

Các vấn đề liên quan