2016-08-29 1 views
0

Я использую OSGI, и я создал веб-сервис. Мой сервер приложений - Glassfish 3. Java 1.7Ошибка 404, когда я добавляю @RequestScoped в @WebService

@WebService(name="MyService", serviceName = "MyWebServices") 
public interface IMyService 
{ 
//some code 
} 

@Stateless(name = "MyService") 
@HandlerChain(file = "handler-chain.xml") 
@WebService(serviceName = "MyWebServices", endpointInterface="com.examlple.webservices.IMyService") 
public class MyService implements IMyService 
{ 
//some code 
} 

Мой сервис работает! И я хочу добавить фильтр сервлета. Я нашел ответ в this topic, что я должен добавить аннотацию @RequestScoped к моей реализации сервиса.

@Stateless(name = "MyService") 
@HandlerChain(file = "handler-chain.xml") 
@WebService(serviceName = "MyWebServices", endpointInterface="com.examlple.webservices.IMyService") 
@RequestScoped 
public class MyService implements IMyService 
{ 
//some code 
} 

Но после этого у меня ошибка 404 в ответах. Я не могу найти причину этой ошибки.

+0

Не можете вы пытаетесь @PostConstruct или аннотации @Interceptor (..), как указано i n поток? – lsiva

ответ

0

Я полагаю, что ServletFilter здесь не тот инструмент, потому что у вас нет сервлета. Похоже, вам нужен SoapHandler.

Вот пример того, как это может выглядеть следующим образом:

import java.io.IOException; 
import java.util.Set; 

import javax.xml.namespace.QName; 
import javax.xml.soap.SOAPException; 
import javax.xml.soap.SOAPMessage; 
import javax.xml.ws.handler.MessageContext; 
import javax.xml.ws.handler.soap.SOAPHandler; 
import javax.xml.ws.handler.soap.SOAPMessageContext; 

public class MyServiceLogHandler implements SOAPHandler<SOAPMessageContext> { 

    @Override 
    public Set<QName> getHeaders() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void close(MessageContext arg0) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public boolean handleFault(SOAPMessageContext arg0) { 
     SOAPMessage message= arg0.getMessage(); 
     try { 
      message.writeTo(System.out); 
     } catch (SOAPException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return false; 
    } 

    @Override 
    public boolean handleMessage(SOAPMessageContext arg0) { 
     SOAPMessage message= arg0.getMessage(); 
     boolean isOutboundMessage= (Boolean)arg0.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
     if(isOutboundMessage){ 
      System.out.println("OUTBOUND MESSAGE\n"); 

     }else{ 
      System.out.println("INBOUND MESSAGE\n"); 
     } 
     try { 
      message.writeTo(System.out); 
     } catch (SOAPException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     return false; 
    } 
} 

Смотрите также:

+0

Могу ли я перефразировать запрос как 'http: // localhost/MyWebServices/MyService? WSDL', используя SOAPHandler? – Paul

+0

Извините, я имею в виду «перехват» – Paul

+0

Я еще не пробовал, но думаю, он должен работать. – unwichtich