标签: jax-ws

CXF + SSL + WebLogic 9.10

我正在开发一个Web应用程序,它的servlet基本上充当Web服务的前端,我使用CXF作为Web服务客户端,应用程序在WebLogic 9.10服务器上运行,每个东西都工作正常,直到项目所有者决定添加ssl supprt,没什么大问题,因为我使用cxf whitout spring,我设法在服务客户端的http管道中配置TLS参数,还配置了一个密钥库,用于服务器密钥,ca根证书和客户端证书,在开发tomcat实例下测试并且工作正常.

当应用程序再次将应用程序重新部署到weblogic服务器并开始出现奇怪的错误时,问题就出现了,首先是:

java.lang.ClassCastException: com.sun.xml.ws.client.sei.SEIStub cannot be cast to org.apache.cxf.frontend.ClientProxy
at org.apache.cxf.frontend.ClientProxy.getClient
Run Code Online (Sandbox Code Playgroud)

然后我意识到weblogic正在加载它自己的JAX-WS实现,没有问题,只是添加了weblogic.xml whit"prefer-web-inf-classes"设置为true,重新部署,现在我得到了这个例外:

java.lang.LinkageError: loader constraint violation: when resolving method "javax.xml.ws.Service.<init>(Ljava/net/URL;Ljavax/xml/namespace/QName;)V" the class loader (instance of weblogic/utils/classloaders/ChangeAwareClassLoader) of the current class, com/adinfi/imgsvc/cm/service/CMBGenericWebServiceService, and the class loader (instance of <bootloader>) for resolved class, javax/xml/ws/Service, have different Class objects for the type javax/xml/namespace/QName used in the signature
Run Code Online (Sandbox Code Playgroud)

那个人得到了我,我认为类路径有问题,所以我开始从应用程序中删除jar并仍然有更多的链接错误,最后一个我得到的是:

java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "org/w3c/dom/UserDataHandler"
Run Code Online (Sandbox Code Playgroud)

这就是我的应用程序的"Web-Inf/lib /"目录现在的样子: …

java weblogic cxf jax-ws weblogic9.x

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

使用 JAX-WS 在 java 中返回原始肥皂响应

我有一个程序,我在其中调用 jax-ws wsimport 函数生成的代码。它看起来是这样的:

HolidayService2 service = new HolidayService2();
HolidayService2Soap proxy = service.getHolidayService2Soap();
ArrayOfCountryCode countries = proxy.GetCountriesAvailable("USA");
Run Code Online (Sandbox Code Playgroud)

proxy.GetCountriesAvailable 方法调用 Web 服务并返回国家/地区代码数组。有什么方法可以在我的应用程序中显示原始肥皂响应吗?

谢谢你的帮助

java web-services jax-ws

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

为 cxf 生成的类添加前缀

我使用 CXF 从 wsdl 生成 Java 类。是否可以为所有生成的类名称分配前缀?

cxf jax-ws prefix

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

JAX-WS 使用 @SchemaValidation 验证 WebLogic 中的架构

我无法找到解决方案,而且我发现更多人遇到了同样的问题,所以我将其发布在这里。


默认情况下,JAX-WS 服务器(至少对于 WebLogic)不会验证接收到的消息及其关联模式。

这会导致很多问题,因为任何无效值(错误的 xsd:dateTime 格式、数字字段上的字母等)都将导致Java 对象中的值,包括必填字段。

我需要做的是应该由服务器提供的简单验证。

import com.sun.xml.internal.ws.developer.SchemaValidation;

@Stateless
@WebService(portName="ValidatedService")
@SchemaValidation
public class ValidatedService {

    public void operation(@WebParam(name="request") ValidatedRequest request) {

        /* do stuff */
    }
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我尝试使用提供的架构验证时,出现以下异常:

Caused By: javax.xml.ws.WebServiceException: Annotation @com.sun.xml.internal.ws.developer.SchemaValidation(handler=class com.sun.xml.internal.ws.server.DraconianValidationErrorHandler) is not recognizable, atleast one constructor of class com.sun.xml.internal.ws.developer.SchemaValidationFeature should be marked with @FeatureConstructor
Run Code Online (Sandbox Code Playgroud)

我不希望实现任何自定义验证器。服务器应该通过简单直接的配置来提供这种类型的服务。

java web-services weblogic jax-ws

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

通过JAXB自定义忽略容器元素

我正在努力解决一个简单的JAXB定制问题.我有这样的架构.(它实际上是Bing Maps Web Services架构的一小部分)

 <xs:complexType name="GeocodeOptions">
  <xs:sequence>
    <xs:element minOccurs="0" name="Count" nillable="true" type="xs:int" />
    <xs:element minOccurs="0" name="Filters" nillable="true" type="ArrayOfFilterBase" />
  </xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfFilterBase">
  <xs:sequence>
    <xs:element minOccurs="0" maxOccurs="unbounded" name="FilterBase" nillable="true" type="FilterBase" />
  </xs:sequence>
</xs:complexType>
Run Code Online (Sandbox Code Playgroud)

现在当我使用wsimport生成java类时,它创建了如下代码结构:

public class GeocodeOptions implements Serializable {
...
    public ArrayOfFilterBase getFilters() {
    ...
    }

    public void setFilters(ArrayOfFilterBase value) {
    ...
    }
}

public class ArrayOfFilterBase implements Serializable {
...
    public List<FilterBase> getFilterBaseList() {
    ...
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所注意到的,ArrayOfFilterBase是一个容器类,我想省略它.我想直接在GeocodeOptions类中使用getFilterBaseList()方法.

是否可以通过JAXB定制来实现?我努力寻找它但找不到解决方案.

谢谢你的帮助.

关心Nabeel Mukhtar

xml xsd wsdl jax-ws jaxb

0
推荐指数
1
解决办法
893
查看次数

Web服务跟随重定向错误 - 错误302(JAXWS)

这是我两天前问过的一个问题的链接,

如何使Web服务请求遵循重定向?

我正在使用jaxws库.

该服务形成URL,然后在内部创建HTTPURLConnection.如果我能抓住连接,我可以将followRedirect设置为true.

但没有得到相同的处理.它的紧急,任何帮助将受到高度赞赏.

redirect web-services jax-ws http-status-code-302

0
推荐指数
1
解决办法
4942
查看次数

ejb中的Web服务问题

我有一个错误,我无法在我的webservice方法中理解.

首先,这是方法:

package com.ubb.damate.webservice;

import java.util.Date;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.jws.WebParam;
import javax.jws.WebService;

import com.ubb.damate.model.UserEvent;
import com.ubb.damate.model.UserEventPK;
import com.ubb.damate.service.UserEventServiceLocal;
import com.ubb.damate.util.DateUtils;

/** Session Bean implementation class UserEventWebService */
@Stateless
@WebService
public class UserEventWebService {
@EJB(beanName = "UserEventService")
private UserEventServiceLocal   userEventService;

public String createOrUpdate(@WebParam(name = "Eventvalue") String eventvalue, @WebParam(name = "Username") String username, @WebParam(name = "Eventname") String eventname) {
    Date date = DateUtils.createDate(-1, 1, 1);

    UserEventPK userPk = new UserEventPK();
    userPk.setEventname(eventname);
    userPk.setUsername(username);
    userPk.setEventdate(date);

    UserEvent userEvent = new UserEvent();
    userEvent.setId(userPk);

    String …
Run Code Online (Sandbox Code Playgroud)

java web-services glassfish jax-ws ejb-3.0

0
推荐指数
1
解决办法
3375
查看次数

JAXWS客户端使用X509服务器身份验证调用JAXWS Webservice

我使用wsdlc ANT任务从wsdl创建了一个JAXWS Web服务,并部署在Weblogic 10.3.0中.我们有Sun one Java Server 7.0,其中安装了Verisign Server证书并配置为将webservice请求转发到weblogic.

我使用wsimport ant任务创建了一个JAXWS客户端来调用webservice.使用https URL运行客户端时,我可以看到weblogic中的xml请求,并成功处理了webservice.但我无法在xml请求/响应中找到任何x509证书的证据.除了使用wsimport生成存根之外,我是否需要在客户端执行任何操作?通过浏览器查看wsdl时,我可以通过浏览器查看证书详细信息.

jax-ws

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

JAX-WS Netbeans 如何启用压缩 Web 服务客户端

我在 Netbeans 7.1.2 中使用了 Web 服务客户端向导,但是当我尝试调用其中一个方法时,我收到以下错误:

javax.xml.ws.soap.SOAPFaultException:异常:未启用压缩,此 Web 服务期望客户端支持 GZIP、Deflate 压缩

生成的骨架文件很多,我无法弄清楚如何启用压缩。有人可以建议吗?

非常感谢

compression netbeans web-services jax-ws

0
推荐指数
1
解决办法
4077
查看次数

如何调用类扩展ClientRequestFilter以进行客户端筛选

我有一个类实现客户端过滤的ClientRequestFilter.

import java.io.IOException;

import javax.ws.rs.client.ClientRequestContext;
import javax.ws.rs.ext.Provider;

import javax.ws.rs.client.ClientRequestFilter;

import org.glassfish.jersey.server.ContainerRequest;

@Provider
public class checkRequestFilter implements ClientRequestFilter{

    @Override
    public void filter(ClientRequestContext clientRequestContext) throws IOException {
        System.out.println("I am in checkResponseFilter");
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道该怎么办,以便我可以调用这个过滤器?

我们需要在web.xml中添加某种servlet吗?

java rest jax-ws jersey filter

0
推荐指数
1
解决办法
3929
查看次数

Sun-jaxws.xml的XSD

我正在处理一些旧的jax-ws东西。

过去,当使用XML时,我需要一个XSD / DTD模式,最好是闻起来像一个已发布的,永恒的 URL。

谷歌搜索之后,我能找到的只是http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/jaxws/sun-jaxws.xsd,其中带有短暂的气味。

<?xml version="1.0" encoding="UTF-8"?>
<endpoints 
    xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/jax-ws/ri/runtime http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/2.0/jaxws/sun-jaxws.xsd"
    version="2.0">

  <endpoint implementation="io.earcam.example.jaxws.Hello" url-pattern="/hello" name="Hello" />

</endpoints>
Run Code Online (Sandbox Code Playgroud)

jax-ws

0
推荐指数
1
解决办法
1035
查看次数

使用https url的Jax-ws最终为http

我试图通过https使用JAX-WS调用Web服务(使用C#开发).我试过通过SoapUI设置一个调用,这是有效的.

但是,当尝试通过生成的jax-ws客户端执行相同操作时,我得到的只是301响应.这类似于我使用带有http url到同一服务的SoapUI,而wireshark告诉我,我做了一个HTTP(HTTP/XML)POST操作.这让我相信,由于某种原因,我生成的JAX-WS客户端尝试通过http而不是https调用.

例示代码:

 new MyServiceInterface(new URL("https://acme.com/services/MyService.svc?wsdl"))
                       .getMyPort().test();
Run Code Online (Sandbox Code Playgroud)

如您所见,我https在创建客户端时提供了一个URL.还有什么需要确保JAX-WS使用https吗?命名空间URI都是http,这会导致问题吗?

更新:

我已经使用接受的答案中的指南在问题中实现了对服务的SOAP请求:工作Soap客户端示例 几乎重复了来自SoapUI的信息,现在它给了我一个适当的200响应.

更新2:

在调试我的JAX-WS客户端时,我找到了这个属性:

"javax.xml.ws.service.endpoint.address" -> "http://acme.com/services/MyService.svc"
Run Code Online (Sandbox Code Playgroud)

这有http,而不是https.有关?

更新3:

使用调试器将"javax.xml.ws.service.endpoint.address"更改为https url而不是http时,我的客户端可以正常工作.但为什么它开始是http?

java https jax-ws

0
推荐指数
1
解决办法
2619
查看次数

使用自定义 X509KeyManager Java 时无法确定 SSL 握手的匹配密码套件

我正在使用 Java7 和 JAX-WS 2.2。

对于 SOAP Web 服务,我需要创建一个自定义X509KeyManager,以便为 JKS 密钥库中的每个连接客户端找到正确的证书。

但是,我已经在努力让我的自定义密钥管理器运行。到目前为止,我使用的是默认的(从初始化的 中检索KeyManagerFactory)并且它基本上可以工作 - 但当然它没有选择正确的证书。所以第一个想法是创建一个自定义X509KeyManager来保存原始密钥管理器,只写出一些日志消息,但通常使用默认行为。

出于某种原因,这根本不起作用。无法建立 SSL 握手。在ClientHello 之后,日志显示以下错误:

Allow unsafe renegotiation: false
Allow legacy hello messages: true
Is initial handshake: true
Is secure renegotiation: false
Thread-3, READ: TLSv1 Handshake, length = 149
*** ClientHello, TLSv1
RandomCookie:  GMT: 1476877930 bytes = { 207, 226, 8, 128, 40, 207, 47, 180, 146, 211, 157, 64, 239, 13, 201, 92, 158, 111, 108, 44, …
Run Code Online (Sandbox Code Playgroud)

java ssl soap jax-ws

0
推荐指数
1
解决办法
5034
查看次数