标签: jax-ws

使用RPC /编码的Web服务的最佳方式是什么?

我需要为后端使用旧式RPC /编码的WSDL Web服务.起初我尝试使用Apache CXF和JAX-WS,但JAX-WS wsimport工具不使用rpc/enoded WSDL.

[错误] JAXWS 2.0不支持rpc/encoded wsdls.

我也对使用JAX-RPC做这项工作有疑问,因为它已经过时了.Axis 1.4是5年的工具.

目前我看到这三个选项:

  1. 使用JAX-WS javax.xml.ws.Dispatch来发送和接收SOAP和某种方式解析它,一个例子
  2. 使用JAX-RPC并获得使用过时技术的恶劣业力,
  3. 手动完成所有操作,以后再讨厌自己.

这些都听起来不太好,所以如果你能提供一些好的线索,想要做什么以及如何解决它,我将不胜感激.

java cxf jax-ws jax-rpc

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

在Java 1.6中为JAX-WS提供不同版本的JAXB

我有一个第三方jar,它附带一个jaxb-impl.jar并将其包含在其manifest类路径中.问题是,似乎提供自己的JAXB版本(无论它是哪个版本)似乎打破了JAX-WS中的SoapFaultBuilder.

根据非官方的JAXB指南,似乎Sun在将JAXB折叠到JDK中时故意更改了包名称,以避免与独立版本冲突.但是,随JDK一起提供的SoapFaultBuilder(我相信JAX-WS的一部分)明确依赖于新的内部包名.如果您添加了一个独立的JAXB jar(即使它与JAXB的版本相同),这会在构建错误消息时导致失败.

这是我的小测试案例:我制作一个简单的Web服务:

package wstest;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

//Service Endpoint Interface
@WebService
@SOAPBinding(style = Style.RPC)
public interface HelloWorld{

    @WebMethod String getHelloWorldAsString(String name);

}
Run Code Online (Sandbox Code Playgroud)

一个简单抛出异常的实现.(因为问题只出现在SOAPFaultBuilder中):

package wstest;

import javax.jws.WebService;

//Service Implementation
@WebService(endpointInterface = "wstest.HelloWorld")
public class HelloWorldImpl implements HelloWorld{

    @Override
    public String getHelloWorldAsString(String name) {
        //return "Hello World JAX-WS " + name;
        throw new RuntimeException("Exception for: " + name);
    }

}
Run Code Online (Sandbox Code Playgroud)

还有一个发布Web服务的类:

package wstest;

import javax.xml.ws.Endpoint;

//Endpoint publisher
public class HelloWorldPublisher{ …
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws jaxb

32
推荐指数
2
解决办法
4万
查看次数

如何在Tomcat 6上手动部署Web服务?

我正在学习如何使用Java开发SOAP Web服务.

到目前为止,我一直在关注这个优秀的教程

http://web.archive.org/web/20120626005333/http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/

一切顺利,我的Web服务通过命令行与它的嵌入式服务器一起工作,然后在NetBeans的帮助下我将它部署在Tomcat上.

我想知道在Tomcat上手动部署它的步骤,以了解它是如何完成的,因为我不喜欢依赖于IDE.

我的意思是,我想知道如何通过命令行和文本编辑器完成所有工作.

我还发现这个链接解释了如何手动将servlet部署到Tomcat,

http://linux-sxs.org/internet_serving/c292.html

但我找不到任何有关如何部署Web服务的文章.

非常感谢.

java deployment tomcat web-services jax-ws

31
推荐指数
1
解决办法
9万
查看次数

Glassfish JAX-WS并排SSL /不安全的EJB Web服务

是否可以同时运行单个@WebService bean作为安全和不安全的方式,最好使用除http/https协议差异之外的相同URL?

我可以使用以下方法运行安全或不安全的服务:

<transport-guarantee>CONFIDENTIAL</transport-guarantee>
Run Code Online (Sandbox Code Playgroud)

要么

<transport-guarantee>NONE</transport-guarantee>
Run Code Online (Sandbox Code Playgroud)

在sun-ejb-jar.xml里面

IE浏览器.

<ejb>
  <ejb-name>MyEJB</ejb-name>
  <webservice-endpoint>
    <port-component-name>MyWebService</port-component-name>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </webservice-endpoint>
</ejb>
Run Code Online (Sandbox Code Playgroud)

建议?

web-services glassfish java-metro-framework jax-ws ejb-3.0

31
推荐指数
1
解决办法
1994
查看次数

maven:如何添加编译阶段后生成的资源

我有一个maven项目,它使用wsgen从已编译的java类生成XSD文件.

问题是我想将生成的文件作为资源添加到jar中.但由于resource阶段在阶段之前运行process-classes,我无法添加它们.

有没有办法告诉maven添加在process-classes阶段生成的其他资源?

java jax-ws maven

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

JAX-WS - 添加SOAP标头

我正在尝试创建一个独立的客户端来使用一些Web服务.我必须将我的用户名和密码添加到SOAP Header中.我尝试添加凭据如下:

OTSWebSvcsService service = new OTSWebSvcsService();
OTSWebSvcs port = service.getOTSWebSvcs();

BindingProvider prov = (BindingProvider)port;
prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "myusername");
prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "mypassword");

...
Run Code Online (Sandbox Code Playgroud)

当我在服务上调用方法时,我得到以下异常:

com.ibm.wsspi.wssecurity.SoapSecurityException: WSEC5048E: One of "SOAP Header" elements required.
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我如何将这些属性添加到SOAP标头?

编辑:我使用的是JDK6中包含的JAX-WS 2.1.我现在正在使用JAX-WS 2.2.我现在得到以下异常:

com.ibm.wsspi.wssecurity.SoapSecurityException: WSEC5509E: A security token whose type is [http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken] is required.
Run Code Online (Sandbox Code Playgroud)

我该如何创建此令牌?

java ws-security soap web-services jax-ws

30
推荐指数
5
解决办法
10万
查看次数

这个JAX-WS客户端调用线程是否安全?

由于WS客户端服务和端口的初始化需要很长时间,所以我喜欢在启动时初始化它们并重用相同的端口实例.初始化看起来像这样:

private static RequestContext requestContext = null;

static
{
    MyService service = new MyService(); 
    MyPort myPort = service.getMyServicePort(); 

    Map<String, Object> requestContextMap = ((BindingProvider) myPort).getRequestContext();
    requestContextMap = ((BindingProvider)myPort).getRequestContext(); 
    requestContextMap.put(BindingProvider.USERNAME_PROPERTY, uName); 
    requestContextMap.put(BindingProvider.PASSWORD_PROPERTY, pWord); 

    rc = new RequestContext();
    rc.setApplication("test");
    rc.setUserId("test");
}
Run Code Online (Sandbox Code Playgroud)

我班上某个地方的电话:

myPort.someFunctionCall(requestContext, "someValue");
Run Code Online (Sandbox Code Playgroud)

我的问题:这个调用是否是线程安全的?

java java-metro-framework jax-ws webservice-client

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

wsimport生成的客户端如何工作?

在此之前,我想让您知道我已经可以连接到Web服务服务器了.我问这个问题是因为我希望深入了解wsimport生成的客户端是如何工作的.根据我的研究,wsimport使用JAXWS.请注意,我不了解JAXWS.

我使用wsimport生成了我的客户端.我使用的WSDL来自Axis2 Web服务,由Axis2自动生成.下面的类是wsimport的结果:

com.datamodel.xsd

  • DataBeanRequest.java
  • DataBeanResponse.java
  • ObjectFactory.java
  • package-info.java

com.service

  • MyWebService.java
  • MyWebServicePortType.java
  • MyMethod.java
  • MyMethodResponse.java
  • ObjectFactory.java
  • package-info.java

使用上面的类,我可以告诉它com.datamodel.xsd包含Web服务服务器使用的bean(不包括ObjectFactorypackage-info).同时,MyMethodMyMethodResponse也用于设置的web服务方法/操作的请求和响应参数豆.

以下是我的问题:(如果你不知道我的一些问题的答案,你真的不必回答所有问题.:)请随时分享你认为我可能会觉得有用的任何信息.)

我是否正确

  • 我的上述假设是否正确?
  • 其他课程的功能是什么?
  • 我检查过MyWebService,它包含一个注释,指的是我用来生成客户端的WSDL的绝对位置.wsdllocation在客户端中指定的相关性是什么?客户如何使用该信息?
  • 我注意到Web服务的实际URL未在生成的任何类中声明.客户如何知道需要连接的位置?
  • 是否对WSDL文件进行了注释,以便客户端可以在连接时读取WSDL文件上的URL?如果是这样,那么是否意味着在必须建立新连接时始终读取WSDL文件?
  • 由于我需要编译我的应用程序并将其安装在不同的服务器上,因此将无效.我可以将其设置为相对路径而不是绝对路径吗?怎么样?(答案:是的,它可以设置为相对路径.该wsimport命令有一个wsdllocation属性,其中wsdllocation可以指定值.)
  • 如果我需要连接到HTTPS,该怎么办?如何设置服务器证书?
  • 当我使用wsimport生成客户端时以及使用Axis2或Apache CXF生成客户端时有什么区别.

java axis2 web-services jax-ws wsimport

30
推荐指数
1
解决办法
4万
查看次数

如何创建所需的WebMethod参数

我们使用"从Java开始"方法使用Metro 1.5堆栈创建JAX-WS 2.0 Web服务.当我们在其中一个Web服务上指向SoapUI等标准工具时,它表明WebMethods的参数是可选的.生成的xsd显示minOccurs = 0.

我需要一种方法来使"从Java开始"方法中需要WebMethod参数(在xsd中可能是minOccurs = 1).我认为这有一个Java注释,但我找不到一个.XmlElement注释具有必需属性,但XmlElement不能应用于WebMethod参数.

有没有办法使我的WebMethod参数成为必需,没有手动编辑xsd并将minOccurs设置为1?

java web-services java-metro-framework jax-ws jaxb

29
推荐指数
2
解决办法
3万
查看次数

sun-jaxws.xml - 什么时候需要,什么时候不需要?

我正在给JAX-WS一个高概述,并注意到一些引用sun-jaxws.xml(以及com.sun.xml.ws.transport.http.servlet.WSServletContextListenercom.sun.xml.ws.transport.http.servlet.WSServlet).

在什么情况下需要这个?(我认为JSR 109服务器?!)

java web-services jax-ws

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