标签: jax-ws

使用JAX-WS进行WSDL运行时验证

我们正在开发一个支持Web服务的MDA平台.用户可以在运行时提供WSDL,我们在内部使用JAX-WS生成所有工件(服务器的服务接口和实现,以及客户端的使用者).

我们希望在用户提供的WSDL文档上添加验证.现在,用户必须使用外部工具(如Oxygen,XMLSpy或Web工具)对其进行验证,但我们希望将其添加为系统的一部分.一个很好的功能是模式验证,包括WSDL的嵌入式模式.

在JAX-WS(RI)中,运行时支持模式验证(使用@SchemaValidation批注),但我们没有找到任何对WSDL验证的支持.

我们已经尝试集成Eclipse的WSDL验证器,但它似乎对我们没有用.

有没有办法用JAX-WS做到这一点?如果没有,是否还有其他可以整合的验证框架?

谢谢

xsd wsdl web-services jax-ws

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

JAX-WS用于调用Web服务的Asynchonous客户端技术

我正在使用JAX-WS对基于SOAP的Web服务进行一些研究,我发现了解客户端部分非常复杂.如果有人可以帮我解释一些主题,我会非常感激.我正在使用SOA书籍和Google,但我真的很困惑,所以我想在这里我可以得到更准确的答案,专注于我需要的东西.

因此,我们可以以同步和异步方式与Web服务进行通信.同步通信缺乏双方必须等待,直到处理结束.

异步客户端允许我们使用2种编程模型以异步方式进行通信:1-回调和2-轮询

  • 疑问1:有人可以用简单的方式向我解释两种模式的差异,优缺点(Callback and Pooling)

在谈论异步通信时,我也明白生产者(Web服务)应该有一种方法,一旦处理完成就找到消费者(客户端).这就是为什么我们要解决.

  • 疑问2:您能否简要解释一下寻址的工作原理?以及如何解决与回调和轮询技术有关的问题?

还有一件事.Dispatch API也让我很困惑.因为他们一直在谈论动态客户.

  • 疑问3:如果Dispatch API一直在谈论动态客户端,那么它与异步通信的关系如何?
  • 疑问4: Dispatch API的两种使用模式(MESSAGE和PAYLOAD),用于什么,以及它们如何与JAXWS的异步通信模型相关?

java soa soap web-services jax-ws

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

为什么JAX-WS导出的对象需要默认构造函数?

JAX-WS要求传输的所有类都具有默认的构造函数(no-arg构造函数).我不明白这个要求,因为客户端基于WSDL创建自己的类.IMO此要求仅适用于那些用作Webservice输入参数的类.

有谁知道如何规避这一要求?

java xml jax-ws jaxb jax-ws-customization

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

使用Active Directory身份验证(NTLM)的JAX-WS IBM客户端使用.Net WS

我想从IBM WebSphere使用.Net WS.

我使用JAX-WS IBM实现创建了一个WS-client,它在IIS上使用.Net WS.客户端在SUSE上,身份验证由NTLM和Windows Server 2003 Active Directory进行.

  • 如果客户端在命令行中执行,则实现调用java.net.Authenticator来获取凭据,并且请求成功.

  • 如果客户端在RAD内执行,则不会调用Authenticator,并且401失败.

  • 如果客户端在WebSphere中执行,则不会调用Authenticator,并且401失败.

  • 如果我直接在.Net WS URL上创建HttpConnection,则会调用Authenticator并且请求成功.

  • 如果不使用JAX-WS IBM实现,我使用Axis2(直接,而不是IBM Axis2 JAX-WS实现),我可以将Authenticator对象传递给Axis2客户端,并且请求是成功的.这仅适用于Windows Server 2003的NTLM协议.当我们迁移到Windows Server 2008时,auth协议是NTLMv2(由于NTLM的安全问题,所有人都转移到NTLMv2)并且请求失败,因为HTTP客户端3不支持NTLMv2. X是Axis2的依赖关系.并且有一段时间他们不会迁移.

如果我使用JAX-WS的其他实现而不是IBM,那么我将失去控制台管理和自动注释读取,以及IBM的支持.

问题

我不明白为什么在RAD内部它不起作用,是从命令行工作的相同程序.

如何使用具有特定凭据的NTLMv2协议支持使JAX-WS IBM实现进行身份验证?(java.net.Authenticator为您提供了这个,它应该被调用...它没有)

是否有任何方法可以使IBM JAX-WS实现使用另一个HTTP客户端而不是标准客户端?

甚至IBM JVM实现也提供了NTLM auth(这就是命令行和直接HttpConnection执行工作的原因)所以我不明白为什么他们不将它用于IBM WS栈.

加分

有没有什么好方法可以通过ActiveDirectory身份验证提供使用WS的双向能力?

评论

Spring WS使用支持NTLMv2 auth的HttpClient 4.X,但我需要一个JAX-WS实现,它应该是IBM的实现.IBM JAX-WS似乎只支持Basic AUTH.我不明白Microsoft WS互操作对IBM来说并不重要.

参考

认证者conf:

http://docs.oracle.com/javase/6/docs/api/java/net/Authenticator.html#setDefault%28java.net.Authenticator%29

/sf/answers/419629451/

提前致谢!

.net websphere ntlm jax-ws active-directory

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

在jax-ws webservice中泛型类会发生什么?

我想知道我是否在jax-ws中使用了泛型方法,例如:

public List<MyCustomClass> getSomething()
Run Code Online (Sandbox Code Playgroud)

jax-ws支持这个吗?在客户端,该方法的返回方式是什么样的?

java cxf jax-ws

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

SOAPFaultException.getFault().getDetail()为null

我使用JAX WS 2.0调用SOAP Web服务.如果出现错误,我收到以下回复:

<?xml version="1.0"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://www.w3.org/2003/05/soap-   envelope">
    <soap:Header/>
    <soap:Body>
        <soap:Fault  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://www.w3.org/2003/05/soap- envelope" xmlns:xml="http://www.w3.org/XML/1998/namespace">
            <soap:Code>  
                <soap:Value>soap:Receiver</soap:Value>
            </soap:Code>
            <soap:Reason>
                <soap:Text  xml:lang="en">Exception of type 'blah blah' was thrown.
                </soap:Text>
            </soap:Reason>
            <soap:Node>{SOME URL}</soap:Node>
            <detail>
                <error>345</error>
                <message>Cannot find user. Blah  blah</message>
            </detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

您可以在详细信息节点中看到有用的错误:

<soap:Envelope>  
    <soap:Body>  
        <soap:Fault>  
            <detail>
Run Code Online (Sandbox Code Playgroud)

在我的客户端,我得到一个SOAPFaultException,它有一个SOAPFault对象.SOAPFault对象似乎缺少我上面发布的节点.SOAPFaultException.getFault().getDetail()为null.但是,它包含所有其他节点,包括soap:Reason.知道为什么它缺少细节节点吗?

谢谢.

java soap jax-ws soapfault

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

如何使用Apache CXF作为客户端?

我知道如何使用Apache CXF生成客户端存根.但是,当我尝试运行生成的类时,它使用JAXWS.另外,我注意到生成的类的导入类来自javax包.如何使用set生成的类来使用Apache CXF库而不是JAXWS库?

下面是我用来生成客户端存根的代码:

wsdl2java -frontend jaxws21 -wsdlLocation "META-INF/wsdl/WSCustom.wsdl" -client -d C:\Workspace\WSClient\META-INF\wsdl\ "C:\Workspace\WSClient\META-INF\wsdl\WSCustom.wsdl"
Run Code Online (Sandbox Code Playgroud)

java web-services cxf jax-ws

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

jax-ws Web服务在websphere 8.5中不起作用

一直试图让jax-ws web服务在websphere 8.5中运行但没有成功.我尝试过Java bean和war包装,无状态ejb和jar包装,但它不起作用.

我试图让它与@webservice注释一起工作.

我没有产生任何额外的文物.我让websphere在部署期间搞清楚了.在部署期间没有错误.部署之后,我尝试在浏览器中运行wsdl以查看Web服务是否已成功安装但我什么都没得到.

不确定我在部署期间是否做错了什么.如果您想了解更多信息,请告诉我.

问候,

java web-services jax-ws java-ee websphere-8

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

CXF InInterceptor未触发

我创建了Web服务.它工作正常.现在我正在尝试对它进行身份验证.我正在为此目的使用CXF拦截器.由于某种原因,拦截器不会发射.我错过了什么?这是我的第一个网络服务.

import javax.annotation.Resource;
import javax.inject.Inject;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;

import org.apache.cxf.interceptor.InInterceptors;

@WebService
@InInterceptors(interceptors = "ws.BasicAuthAuthorizationInterceptor")
public class Service {

    @WebMethod
    public void test(@WebParam(name = "value") Integer value) throws Exception {
        System.out.println("Value = " + value);
    }    
}
Run Code Online (Sandbox Code Playgroud)

-

package ws;

import java.io.IOException;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import org.apache.cxf.binding.soap.interceptor.SoapHeaderInterceptor;
import org.apache.cxf.configuration.security.AuthorizationPolicy;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
import org.apache.cxf.transport.Conduit;
import org.apache.cxf.ws.addressing.EndpointReferenceType;

public class BasicAuthAuthorizationInterceptor extends SoapHeaderInterceptor {

@Override
public …
Run Code Online (Sandbox Code Playgroud)

jboss cxf jax-ws maven

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

更改JAX-WS服务URL

在创建JAX-WS Web服务时是否有可能更改Webservice URL?

自动URL是(在Glassfish 3上):http://<host>/<context>/<Servicename>但我需要的是:( http://<host>/<context>/axis/services/<Servicename>因为它是从轴到JAX-WS的端口)

有没有办法告诉JAX-WS在哪里发布WS?

使用sun-jaxws.xml是没有选择的,因为它禁用了@ EJB/@Inject DI.

java web-services glassfish jax-ws

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