标签: jax-ws

Java Web服务容器

我刚刚开始学习Java Web服务(JAX-WS),并且有一个问题。参考文档总是谈论Web服务容器。我的问题是:什么是Web服务容器,为什么我们需要它。我在“ Java Web服务启动并运行”一书中看到了一个JAX-WS的简单示例,其中使用以下内容发布了Web服务:

Endpoint.publish("http://127.0.0.1:9876/ts", new TimeServerImpl());
Run Code Online (Sandbox Code Playgroud)

此示例不需要我在Web Server / App Server或任何容器中托管Web服务。

而且我还能够访问该Web服务。

那么什么是容器,为什么我们需要它用于Web服务?

java containers web-services jax-ws java-ee

5
推荐指数
1
解决办法
6241
查看次数

直接从源创建Web服务客户端

我试图直接从@Webservice类生成WS客户端jar.

我们来看这个例子:

   package com.example.maven.jaxws.helloservice;
   import javax.jws.WebService;
   @WebService
   public class Hello {
     public String sayHello(String param) {
     ;  return "Hello " + param;
     }
   }  
Run Code Online (Sandbox Code Playgroud)

我可以生成一个war文件并使用glassfish来提供这个webservice,从那里我可以使用glassfish WSDL URL来生成客户端源.

我想要做的是跳过glassfish部分.从定义webservice的maven项目开始,我想使用jaxws-maven-plugin来创建客户端类,但我找不到任何方法来指定webservice的实际URL.

应该可能吧?

@see还使用已知但无法访问的wsdl创建Web服务客户端

java wsdl maven-2 jax-ws

5
推荐指数
2
解决办法
1万
查看次数

如何配置@HandlerChain指向JAR文件中的处理程序链配置文件?

有没有办法引用分布在JAR文件中的处理程序配置文件(例如:handler.xml)?

像这样:@HandlerChain(file="somefile.jar")或者@HandlerChain(file="myhandler.xml"),假设myhandler.xml存储在somefile.jar.

java web-services jax-ws

5
推荐指数
1
解决办法
2万
查看次数

Jax-ws wsgen生成一个引用公共模式的wsdl

我们正在开发一个具有几十个服务接口的相当大的应用程序.对于每个服务,使用wsgen生成wsdl(使用jaxws-maven-plugin maven插件).对于每个服务,在wsdl中使用不同的命名空间.

服务接口共享一组公共bean(主要是DTO).现在,每个wsdl的XSD中定义了这些公共类的定义,重复了很多信息,这给我们在客户端造成了问题(大量编译时,类不兼容).

首先,我尝试使用schemagen为公共类创建模式,但无法将其传递给wsgen.有没有办法将一个(或多个)常见XSD传递给wsgen并让生成的wsdl(s)引用这些?

我还尝试使用指定自定义命名空间的@XmlRootElement来注释公共类:这次wsgen识别了自定义命名空间,并为每个wsdl生成了一个XSD,但没有在任何地方包含单个(公共)xsd.

有人能指出我这个问题的解决方案吗?

java wsdl jax-ws wsgen

5
推荐指数
0
解决办法
1509
查看次数

使用JAX-WS调用异步Web服务:使用wsimport支持异步还是自己滚动?

有一个由年轻的杨优秀的文章,介绍了如何使用的wsimport创建具有异步Web服务调用Web服务客户端工件.异步要求WSDL具有标记

<enableAsyncMapping>true</enableAsyncMapping>

在其绑定部分.如果您使用自下而上的方法和JAX-WS带注释的Java类,则无法直接在WSDL中执行此操作,因为WSDL是Web服务器上生成的工件.相反,当在WSDL上执行wsimport时,您使用Ant或Maven等构建工具来包含此绑定.

生成的客户端工件具有返回a的异步方法调用

Future<?>
Run Code Online (Sandbox Code Playgroud)

或者a

Response
Run Code Online (Sandbox Code Playgroud)

这是一个未来.

阅读杨的文章后我的问题是为什么不只是使用Executors和Futures滚动我自己的异步Web服务调用.wsimport创建的工件是否提供了一些我无法通过自己的方法看到的优势?

如果有人对这两种方法都有经验或见解,我将非常感谢您的反馈.

asynchronous web-services jax-ws jax-ws-customization

5
推荐指数
2
解决办法
7737
查看次数

使Web服务请求参数成为必填字段

这是代码第一种Jax-WS Web服务方法.

@WebService (serviceName = "MyInstallPhotoService")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class MyInstallPhotoWS {

    private MyInstallPhotoManager myInstallPhotoManager;

    @Resource
    WebServiceContext context;


    @WebMethod(operationName = "getMyInstallPhoto")
    @WebResult(name = "PhotoRetrievalResponse", partName = "PhotoRetrievalResponse")
    public MyInstallPhotoResponse getBadgePhoto(@WebParam(name = "BadgeNumber", partName = "BadgeNumber") String badgeNumber, @WebParam(name = "LastName", partName = "LastName") String lastName) {
        MyInstallPhotoResponse myInstallPhotoResponse = new MyInstallPhotoResponse();
        try {
            // more code here
        } catch (Exception e) {
          e.printStackTrace();
        }
        return myInstallPhotoResponse;
     }
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,MyInstallPhotoResponse在xml架构中定义.SoapUI请求生成了这样的东西

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
   <soapenv:Header/>
   <soapenv:Body>
      <rsw:getBadgePhoto>
         <!--Optional:-->
         <rsw:BadgeNumber>I180748-003</rsw:BadgeNumber>
         <!--Optional:-->
         <rsw:LastName>Jones</rsw:LastName>
      </rsw:getBadgePhoto> …
Run Code Online (Sandbox Code Playgroud)

xsd wsdl jax-ws

5
推荐指数
1
解决办法
3万
查看次数

在处理程序(JAX-WS)上获取端点的Url

我正在使用通用的Handler类实现许多JAX-WS Web服务,以验证传入SOAP消息的正确结构.

有没有办法获取指向当前消息的URL,以便我可以自动从此URL获取架构并验证消息?

java java-metro-framework jax-ws

5
推荐指数
2
解决办法
6475
查看次数

JAX-WS SOAP Faults - 在SOAPFaultException中解析错误的详细信息

如果这是一个错误的肥皂请求,我需要获取错误的详细信息.

我正在使用JAX-WS来创建Web服务客户端.我的问题是,在错误的事务中,Web服务客户端能够捕获SOAPFaultException但没有详细信息:

javax.xml.ws.soap.SOAPFaultException: Component Interface API.    at com.sun.xml.internal.ws.fault.SOAP11Fault.getProtocolException(SOAP11Fault.java:178)
Run Code Online (Sandbox Code Playgroud)

如果我通过SOAPUI发送请求,我可以获得详细信息的响应:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">   <SOAP-ENV:Body>
     <SOAP-ENV:Fault>
        <faultcode>SOAP-ENV:Server</faultcode>
        <faultstring>Component Interface API.</faultstring>
        <detail>
           <IBResponse type="Error">
              <DefaultTitle>Integration Broker Response</DefaultTitle>
              <StatusCode>20</StatusCode>
              <MessageSetID>180</MessageSetID>
              <MessageID>117</MessageID>
              <DefaultMessage>You are allowed to claim one meal per day</DefaultMessage>
              <MessageParameters>
                 <keyinformation>
                    <EMPLID>112233</EMPLID>
                 </keyinformation>
              </MessageParameters>
           </IBResponse>
        </detail>
     </SOAP-ENV:Fault>   </SOAP-ENV:Body> </SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)

我是否错过了Web服务客户端中的任何配置?提前谢谢了.

java soap web-services jax-ws

5
推荐指数
1
解决办法
2万
查看次数

在CXF代理客户端上设置超时

我在CXF中通过JAXRSClientFactoryBean.create创建了一个JAX-RS客户端.如何设置连接/接收超时?

我想我需要掌握管道,但无法弄清楚如何.这个项目没有使用Spring.

cxf jax-ws

5
推荐指数
2
解决办法
4327
查看次数

GlassFish Server部署

我是GlassFish Server和WS的新手.我刚刚部署了一个Web应用程序.使用具有此web.xml的maven生成

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>


</web-app>
Run Code Online (Sandbox Code Playgroud)

我单击Web应用程序链接

我在应用程序中有这个类:

import javax.jws.WebMethod;
import javax.jws.WebService;

import javax.servlet.http.HttpSession;

import javax.xml.ws.WebServiceContext;

import javax.xml.ws.handler.MessageContext;


    @WebService(serviceName="IberiaWS")
    public class IberiaWS {

      @Resource
      private WebServiceContext wsContext;  

      public IberiaWS () {
      }

      private UserVO getSessionUserVO() {
        MessageContext mc = wsContext.getMessageContext();
        HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
        return (UserVO)session.getAttribute("uservo");
      }

      private void setSessionUserVO(UserVO uservo) {
        MessageContext mc = wsContext.getMessageContext();
        HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
        session.setAttribute("uservo", uservo);

      }

      @WebMethod
      public boolean …
Run Code Online (Sandbox Code Playgroud)

java web-services glassfish jax-ws jaxws-maven-plugin

5
推荐指数
1
解决办法
132
查看次数