标签: jax-ws

如何使用JAX-WS webfault

我写了一个webservice并试图抛出我的自定义异常,但我收到错误请帮我解决.

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService(name = "WebService")
public class WebServiceTest {
    public String sayHello(String name) throws InvalidInputException {
        throw new InvalidInputException("I am testing", null);
    }
    public static void main(String[] args) {
        WebServiceTest server = new WebServiceTest();
        Endpoint endpoint = Endpoint.publish(
                "http://localhost:9191/webServiceTest", server);
    }
}


import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlType;

@XmlType(name = "InputMessageValidationFaultType")
public class FaultBean {

    @XmlAttribute
    protected String msg;

    public String getMsg() {
        return msg;
    }

    public void setMsg(String value) {
        this.msg = value;
    }

}


import javax.xml.ws.WebFault;

@WebFault(faultBean …
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws

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

编译时找不到com.sun.xml.internal.ws.developer.JAXWSProperties

我们使用了类JAXWSPropertiescom.sun.*包中的代码,以这样设置超时属性:

import com.sun.xml.internal.ws.developer.JAXWSProperties;
...
Map<String, Object> ctxt = ((BindingProvider) port).getRequestContext();
ctxt.put(JAXWSProperties.CONNECT_TIMEOUT, 10000);
Run Code Online (Sandbox Code Playgroud)

它在本地Eclipse中编译良好,但不在连续集成系统上编译(两者都使用JDK 1.6).通过研究这个问题,我了解到com.sun.*应该避免使用这个包.

所以我的问题是:

  • 导致编译时导入失败的原因是什么?
  • 应该用什么来代替JAXWSProperties

java jax-ws

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

使用自顶向下方法的Eclipse入门JAX-WS教程

我正在寻找一个与Eclipse一起使用的JAX-WS教程.我特别想要的是一些使用自上而下的方法,你有一个wsdl文件的url并运行wsgen来生成你的存根.

谢谢!

java web-services jax-ws

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

在JDK 6上安装最新的JAX-WS

我按照这里的说明 JDK v1.6.0_31之上正确安装了最新的JAX-WS版本(2.2.6)(即将JAX-WS发行版中的jaxws-api.jar和jaxb-api.jar复制到我的$ {JAVA_HOME}/lib/endorsed目录).从Eclipse内部我可以正确运行wsimport ant任务,生成的代码在以下注释中给出了一个版本标记:

/**
* This class was generated by the JAX-WS RI.
* JAX-WS RI 2.2.6b21 
* Generated source version: 2.2
* 
*/
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是生成的客户端代码显示错误导致我相信编译器仍在使用JAX-WS版本2.1:

The constructor Service(URL, QName, WebServiceFeature[]) is undefined
Run Code Online (Sandbox Code Playgroud)

The attribute required is undefined for the annotation type XmlElementRef
Run Code Online (Sandbox Code Playgroud)

我尝试在启动Eclipse时显式设置-Djava.endorsed.dir arg,我也尝试在Eclipse-> Preferences-> Java-> InstalledJREs下设置这个arg,但这些都没有帮助.我的wsimport ant任务类路径被定义为查看JAX-WS 2.2.6 jar.我也试过设置我的项目构建路径来拉入2.2.6罐子.似乎没什么用.我错过了什么吗?

jax-ws

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

jax-ws将Content-type更改为Content-Type,因为服务器是超敏感的

我必须连接到一个实现效果不佳的服务器,它只能理解Content-Type(资本-T)而不是Content-type.我怎样才能让我的JAX-WS客户端发送Content-Type

我试过了:

Map<String, List<String>> headers = (Map<String, List<String>>)
((BindingProvider)port).getRequestContext().get(MessageContext.HTTP_REQUEST_HEADERS);
Run Code Online (Sandbox Code Playgroud)

不过headersnull.我究竟做错了什么?

java client header http jax-ws

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

JAX-WS,身份验证和授权 - 如何?

在Web服务中进行身份验证和授权的最佳方法是什么?

我正在开发一组Web服务,需要基于角色的访问控制.使用metro - SOAP,简单的java而不使用EJB.

  • 我想使用用户名和密码对用户进行一次身份验证,以便与数据库进行匹配.在随后的电话中.
  • 我想使用某种会话管理.可以是在登录时检索到客户端的某个会话ID,以便在所有呼叫中显示.

至今:

  • 使用数据库读取身份验证 - 但我想要应用程序级别验证;
  • 使用jax-ws读取应用程序身份验证 - 但我不想每次都执行身份验证机制;

  • 我想我可以使用SOAP处理程序拦截所有消息,并使用消息附带的一些会话标识符令牌在hander中执行授权控制,该令牌可以与保存在数据库中的标识符匹配,登录Web方法.

编辑:

我还有一些问题:

  • 如何知道被调用的Web方法的名称?
  • 我应该使用什么样的令牌?
  • 如何在通话之间传递此令牌?

编辑2

因为@ ag112答案:

我正在使用Glassfish.

我使用WS-Policy和WS-Security来加密和签名消息.使用相互证书身份验证.我想在应用程序之间补充此消息级别的安全性,同时在消息级别对用户进行身份验证和授权.

我只是开发服务,我几乎不知道客户,只是他们可以用不同的语言创建.

在这一点上,我认为最重要的是做我需要做的事情来验证和验证用户,我是客户端应用程序最简单的实现方式.

java authentication web-services jax-ws access-control

11
推荐指数
1
解决办法
9974
查看次数

我在哪里可以找到Java 6附带的JAX-WS版本?

我正在使用Java 6来了解有关Web服务(JAX-WS)的更多信息.我还读到JAX-WS最新版本可用于Metro,即如果您不使用JDK6并计划使用JAX-WS,则可以使用Metro.

我想知道我的JDK附带了哪个版本的JAX-WS?我正在使用jdk1.6.0_22.

java web-services jax-ws jax-rpc

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

Java:JAX-WS Mapping

我正在使用JAX-WS进行Web服务.

每当我使用char作为方法参数时,我将它作为xsd中的unsignedShort(Focus on weatherLetter).

这是宣言:

@WebMethod
public boolean setWXtatus(
        @WebParam(name = "weatherLetter") char weatherLetter,
        @WebParam(name = "weatherDigit") int weatherDigit,
        @WebParam(name = "cloudCover") int cloudCover,
        @WebParam(name = "cloudBaseInHundredsOfFeet") int cloudBaseInHundredsOfFeet,
        @WebParam(name = "pressureInHg") int pressureInHg,
        @WebParam(name = "visibilityInKm") int visibilityInKm,
        @WebParam(name = "windSpeed") int windSpeed,
        @WebParam(name = "windDirection") int windDirection,
        @WebParam(name = "lastUpdateHour") int lastUpdateHour,
        @WebParam(name = "lastUpdateMin") int lastUpdateMin
) 
Run Code Online (Sandbox Code Playgroud)

这是我得到的类型映射:

<xs:complexType name="setWXStatus">
<xs:sequence>
<xs:element name="weatherLetter" type="xs:unsignedShort" minOccurs="0"/>
<xs:element name="weatherDigit" type="xs:int"/>
<xs:element name="cloudCover" type="xs:int"/>
<xs:element name="cloudBaseInHundredsOfFeet" type="xs:int"/>
<xs:element name="pressureInHg" type="xs:int"/> …
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws jaxb java-ee

11
推荐指数
3
解决办法
7954
查看次数

wsimport - 如何在单独的项目/文件夹中生成服务端点类和JAXB类

对于具有多个Web服务(多个WSDL)的项目,我们使用自上而下的方法.每个Web服务都需要设置为单独的项目,并作为单独的战争部署.

问题是WSDL共享一些常见的.xsd文件.目前,如果我们为每个WSDL运行wsimport,则每个Web服务项目中都会复制常见的JAXB类.

理想情况下,我们希望在公共共享项目中单独生成JAXB类,然后在每个Web服务项目中重用JAXB类项目,但wsimport不提供跳过JAXB类生成或指定其他位置的选项对于JAXB类.

关于如何在不同的JAX-WS Web服务端点之间共享JAXB类的任何想法?

java web-services jax-ws jaxb wsimport

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

Sun SAAJ SOAP实现的替代方案

我正在寻找javax.xml.soapSun SAAJ之外的替代SOAP()实现.原因是因为我想在IBM JDK 5驱动的Tomcat AS上部署JAX-WS WebService,但是已知问题是Sun SAAJ实现依赖于重新分配的Xerces类(请参阅Ref Impl不能与IBM JDKSAAJ测试一起使用)案例不再适用于IBM的SDK),唯一的出路就是使用自定义Maven配置文件来实现com.sun.xml.parsers:jaxp-ri:

<profiles>
    <profile>
        <id>pre-jdk5-profile</id>

        <activation>
            <jdk>(,1.4]</jdk>
        </activation>

        <dependencies>
            <dependency>
                <groupId>com.sun.xml.parsers</groupId>
                <artifactId>jaxp-ri</artifactId>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>
</profiles>
Run Code Online (Sandbox Code Playgroud)

我想删除此配置文件,只需将SOAP实现替换为适用于任何地方的实现.

我认为供应商SOAP实现可能附带Apache Axis/Apache CXF(基于IBM SOAP4J)或JBoss AS - 请根据我的偏好提供信息:

  • 实施应该很容易与其他工作人员(最好是一个轻量级的罐子)分开.
  • 实现应支持带附件的SOAP消息.
  • 实现应该与Java5字节码兼容.
  • 如果在Maven Central中可以实现,那么这是一个优点.

参考文献:

java soap web-services jax-ws

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