敬礼,
我是WebLogicWebService实现方面的新手。尝试使用JAX-RPC从SOAP消息中获取客户端的远程地址。需要从SOAP消息头获取客户端的远程IP。根据BEA/Oracle文档,尝试了许多解决方案。WebService java文件:
@WebService
public class clientsIPWs {
@Control
private SoapMessageControl smc;
@WebMethod
@WebResult(name="return")
public String getClientAddress() {
return smc.getRemoteAddress();
}
}
SoapMessageControl。Java语言
@ControlInterface
public interface SoapMessageControl {
public String getRemoteAddress();
}
SoapMessageControlImpl.java
@ControlImplementation
public class SoapMessageControlImpl implements SoapMessageControl, Serializable {
private static final long serialVersionUID = 1L;
@Context
private SOAPMessageContext smc;
@WebMethod()
public String getRemoteAddress() {
HttpServletRequest request =
(HttpServletRequest) smc.getProperty("transport.http.servletRequest");
return request.getRemoteAddr();
}
}
在上一次测试中,尝试了许多类似于@Context的MessageContext/WebServiceContext的变体(这一个已被弃用),但每次测试都会收到这样的异常:
未能调用结束组件未能调用方法java。控件处的lang.NullPointerException。SoapMessageControlImpl。控件处的getRemoteAddress(SoapMessageControlImpl.java:33)。SoapMessageControlBean。服务上的getRemoteAddress(SoapMessageControlBean.java:119)。客户产品。sun上的getClientAddress(CustProdWs.java:63)。反映NativeMethodAccessorImpl。在sun调用0(本机方法)。反映NativeMethodAccessorImpl。在sun上调用(NativeMethodAccessorImpl.java:39)。反映DelegatingMethodAccessorImpl。在java上调用(DelegatingMethodAccessorImpl.java:25)。lang.reflect。方法在weblogic上调用(方法java:585)。wsee。组成部分波乔。JavaClassComponent。在weblogic上调用(JavaClassComponent.java:99)。wsee。ws。派遣服务器ComponentHandler。weblogic上的HandlerRequest(ComponentHandler.java:64)。wsee。处理程序。HandlerIterator。weblogic上的HandlerRequest(HandlerIterator.java:127)。wsee。ws。派遣服务器服务器调度程序。weblogic上的dispatch(ServerDispatcher.java:85)。wsee。ws。WsSkel。在weblogic上调用(WsSkel.java:80)。wsee。服务器servlet。SoapProcessor。weblogic上的handlePost(SoapProcessor.java:66)。wsee。服务器servlet。SoapProcessor。weblogic上的进程(SoapProcessor.java:44)。wsee。服务器servlet。BaseWSServlet$AuthorizedInvoke。在weblogic上运行(BaseWSServlet.java:181)。wsee。服务器servlet。BaseWSServlet。javax上的服务(BaseWSServlet.java:92)。servlet。http。HttpServlet。weblogic上的服务(HttpServlet.java:856)。servlet。内部的StubSecurityHelper$ServletServiceAction。在weblogic上运行(StubSecurityHelper.java:227)。servlet。内部的StubSecurityHelper。weblogic上的invokeServlet(StubSecurityHelper.java:125)。servlet。内部的ServletStubImpl。在weblogic上执行(ServletStubImpl.java:283)。servlet。内部的ServletStubImpl。在weblogic上执行(ServletStubImpl.java:175)。servlet。内部的WebAppServletContext$ServletinLocationAction。在weblogic上运行(WebAppServletContext.java:3244)。安全国际计算语言学协会。内部的AuthenticatedSubject。weblogic上的doAs(AuthenticatedSubject.java:321)。安全服务SecurityManager。weblogic上的runAs(SecurityManager.java:121)。servlet。内部的WebAppServletContext。weblogic上的securedExecute(WebAppServletContext.java:2010)。servlet。内部的WebAppServletContext。在weblogic上执行(WebAppServletContext.java:1916)。servlet。内部的ServletRequestImpl。在weblogic上运行(ServletRequestImpl.java:1366)。工作执行读取。在weblogic上执行(ExecuteThread.java:209)。工作ExecuteThread。运行(ExecuteThread.java:181)
在google中,几乎每个解决方案都使用JAX-WS,这在这个框架中对我来说是不可用的。谢谢。
此解决方案对我有效:
获取HttpServletRequest/响应对象
如果Web服务使用HTTP作为其传输协议,则可以使用weblogic。wsee。联系运输servlet。获取javax的HttpTransportUtils API。servlet。http。HttpServletRequest和javax。servlet。http。来自JAX-RPC ServletEndpointContext对象的HttpServletResponse对象,如以下示例所示(相关代码以粗体显示,并在示例后解释):
package examples.webservices.http_transport_utils;
import javax.xml.rpc.server.ServiceLifecycle;
import javax.xml.rpc.server.ServletEndpointContext;
import javax.xml.rpc.ServiceException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;
import weblogic.wsee.connection.transport.servlet.HttpTransportUtils;
@WebService(name="HttpTransportUtilsPortType",
serviceName="HttpTransportUtilsService",
targetNamespace="http://example.org")
@WLHttpTransport(contextPath="servlet", serviceUri="HttpTransportUtils",
portName="HttpTransportUtilsPort")
public class HttpTransportUtilsImpl implements ServiceLifecycle {
private ServletEndpointContext wsctx = null;
public void init(Object context) throws ServiceException {
System.out.println("ServletEndpointContext inited...");
wsctx = (ServletEndpointContext)context;
}
public void destroy() {
System.out.println("ServletEndpointContext destroyed...");
wsctx = null;
}
@WebMethod()
public String getServletRequestAndResponse() {
HttpServletRequest request =
HttpTransportUtils.getHttpServletRequest(wsctx.getMessageContext());
HttpServletResponse response =
HttpTransportUtils.getHttpServletResponse(wsctx.getMessageContext());
System.out.println("HttpTransportUtils API used successfully.");
return "HttpTransportUtils API used successfully";
}
}
问题内容: 我使用AppFuse创建了一个基本的应用程序外壳,并按照AppFuse教程使用Jax- RS创建了一个简单的RESTful服务。那很好。调用时,将Person对象的集合作为Json格式的字符串返回,并带有正确的数据。 我现在想从Appfuse提供的RESTful服务中访问和对象(以使用需要这些对象的另一个库)。 我 _认为_应该可以通过添加@Context注释来实现,但是,如果我添加@
我有一个简单的客户端和服务器设置。客户端希望在服务器中使用ZeroMQ执行通信方法。我将使用REQ和REP套接字,因为它们适合这个用例。然而,我对protobuf的定义有疑问。我认为这两个选项可用于实现目标: 其中“control”包含要远程执行的方法的名称。另一种选择可以是: 最好的方法是什么?或者至少使用一种方法而不是另一种方法的权衡是什么?
我正在使用Apache Tomcat v6服务器。在创建新的网络服务时,我获得了“Apache Axis”、“Apache Axis2”和“Apache CXF2. x”的网络服务运行时选项。 是否可以将运行时设置为“JAX-RPC”或“JAX WS”? 编辑: 我正在使用Eclipse IDE
我将rest服务配置为通过Variant实现内容协商。在jersey上一切正常,但在apache cxf上有些问题。 找不到类ContentType:Application/XML的消息正文编写器 当我将响应构造为xml类型时,似乎找不到正确的正文编写器。
创建JAX-WS示例是一项简单的任务,因为它不需要额外的配置设置。 JAX-WS API内置于JDK中,因此无需为其加载任何额外的jar文件。 让我们看一下RPC样式的JAX-WS简单示例。 创建一个Java项目:JAXWSHelloworld,在这个项目中创建了4个文件: HelloWorld.java HelloWorldImpl.java Publisher.java HelloWorldC
问题内容: 我正在尝试使用异步响应构建REST Web服务。 我已经在网上解决了这个错误,但是,没有一种解决方案对我有用。我不确定如何去做。 这是REST服务的代码,它具有AsyncResponse,并且取自,我将在下面提供该文件中指定的jar文件。问题是,在部署战争时,我遇到一个例外: 我的课如下: 我的Maven文件如下: 问题答案: 是 当应用程序试图调用一个抽象方法抛出 。 是中的抽象方法