【问题标题】:Error 404 when I add @RequestScoped to the @WebService将 @RequestScoped 添加到 @WebService 时出现错误 404
【发布时间】:2016-08-29 15:14:18
【问题描述】:

我使用 OSGI 并创建了 Web 服务。我的应用服务器是 Glassfish 3。Java 1.7

@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
}

我的服务有效!我想添加 Servlet 过滤器。我在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 的回复。我找不到这个错误的原因。

【问题讨论】:

  • 你不能尝试线程中提到的@postConstruct 或@Interceptor(..) 注释吗?

标签: java web-services glassfish osgi


【解决方案1】:

我猜 ServletFilter 在这里是错误的工具,因为您没有 servlet。看起来您需要的是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;
    }
}

另请参阅:

【讨论】:

  • 我可以使用 SOAPHandler 插入像 http://localhost/MyWebServices/MyService?WSDL 这样的请求吗?
  • 对不起,我的意思是“拦截”
  • 抱歉,soaphandler 拦截了soap消息,但没有像http://localhost/MyWebServices/MyService?WSDL这样的请求
猜你喜欢
  • 2016-07-30
  • 2021-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-17
  • 2017-07-23
相关资源
最近更新 更多