标签: jax-ws

我的Apache CXF客户端出了什么问题?

这是我的一部分pom.xml:

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-frontend-jaxws</artifactId>
  <version>${cxf.version}</version>
  <scope>runtime</scope>
</dependency>
<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-transports-http</artifactId>
  <version>${cxf.version}</version>
  <scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Apache CXF作为JAX-WS的实现.一切正常(Java代码是通过WSDL生成的org.apache.cxf:cxf-codegen-plugin:2.4.0),直到执行:

java.lang.NoSuchMethodError:
javax.wsdl.xml.WSDLReader.readWSDL(Ljavax/wsdl/xml/WSDLLocator;Lorg/w3c/dom/Element;)Ljavax/wsdl/Definition;
at org.apache.cxf.wsdl11.WSDLManagerImpl.loadDefinition(WSDLManagerImpl.java:237)
at org.apache.cxf.wsdl11.WSDLManagerImpl.getDefinition(WSDLManagerImpl.java:186)
at org.apache.cxf.wsdl11.WSDLServiceFactory.<init>(WSDLServiceFactory.java:91)
at org.apache.cxf.jaxws.ServiceImpl.initializePorts(ServiceImpl.java:203)
at org.apache.cxf.jaxws.ServiceImpl.<init>(ServiceImpl.java:147)
at org.apache.cxf.jaxws.spi.ProviderImpl.createServiceDelegate(ProviderImpl.java:90)
at javax.xml.ws.Service.<init>(Service.java:56)
....
Run Code Online (Sandbox Code Playgroud)

这是什么意思?我错过了什么依赖?

java cxf jax-ws maven

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

JAX-WS与JAX-RS对于RESTful Web服务

您好我已经使用JAX-WS进行基于SOAP的Web服务.现在我想使用REST,因为REST比我从这里研究的那样优于SOAP .

但是从不同的文章我知道我们也可以从JAX-WS创建RESTful Web服务.但大多数人都说我们应该使用JAX-RS而不是JAX-WS.

我的问题是JAX-WS RESTful webservice和JAX-RS(jersey)之间有什么区别.JAX-RS优于JAX-WS有什么优势?为什么我们应该将JAX-RS用于RESTful Web服务?

提前致谢.

java rest soap jax-rs jax-ws

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

当用户名和密码位于数据库中时,JAX-WS和BASIC身份验证

我是JAX-WS的新手,有一件事我不明白.

有很多关于如何设置JAX-WS安全性的教程,但几乎所有情况下BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY都存储在一些.xml文件中(取决于我认为的容器) - 它们是"硬编码的"那是.这就是我没有得到的.如何通过将BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY与数据库中的用户名和密码进行比较来验证Web服务客户端?我尝试在客户端设置BindingProvider.USERNAME_PROPERTY和BindingProvider.PASSWORD_PROPERTY,如下所示:

    ShopingCartService scs = new ShopingCartService(wsdlURL, name);
    ShopingCart sc = scs.getShopingCartPort();
    Map<String, Object> requestContext = ((BindingProvider)sc).getRequestContext();
    requestContext.put(BindingProvider.USERNAME_PROPERTY, userName);
    requestContext.put(BindingProvider.PASSWORD_PROPERTY, password);
    sc.someFunctionCall();
Run Code Online (Sandbox Code Playgroud)

然后,在服务器端检索如下:

@Resource
WebServiceContext wsContext;

@WebMethod
public void someFunctionCall() {
    MessageContext mc = wsContext.getMessageContext();
    mc.get(BindingProvider.USERNAME_PROPERTY);
    mc.get(BindingProvider.PASSWORD_PROPERTY);
}
Run Code Online (Sandbox Code Playgroud)

但我总是得到null,我没有在xml中设置任何东西,web服务工作得很好,除了我不能得到那些变量:(

我在java 1.6,tomcat 6和JAX-WS上运行.

任何有关使用数据库中的密码验证用户的帮助都非常感谢,谢谢.

java jax-ws basic-authentication tomcat6

22
推荐指数
3
解决办法
10万
查看次数

JAX-WS与JAX-RPC

我写了2个webservices,一个使用Jax-WS,另一个使用Jax-RPC.他们只返回一个字符串.

我用jMeter对它进行了压力测试,奇怪的是,因此Jax-RPC的速度要快一些.

在性能方面(响应时间,CPU时间,堆),我何时真正从Jax-WS中获利?我该如何证明呢?

谢谢你的时间!=)

java jax-ws jax-rpc java-ee websphere-7

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

使用SAML(SSO)的Web服务安全性 - 如何?

问题:

我想实现一组Web服务,以保护SAML.我需要对用户进行身份验证,还需要根据用户角色进行授权.我发现了一些与此类似的问题,但没有一个问题得到满意答案.

场景:

  • 仅使用Webservices访问Java Webapp;
  • SOAP - 地铁;
  • 客户端使用他们将开发的一些桌面应用程序.

我需要的主要功能:

  • 免费软件;
  • SAML 2.0;
  • 用于管理用户信息的LDAP(或类似解决方案);
  • 消息级安全性(SOAP).

问题:

我研究了一些SAML(SSO)解决方案(例如Shibboleth,opemAM,JOSSO ......);

  • 我可以使用其中任何一个,而不会牺牲任何关键功能吗?
  • 或者我是否需要实现自己的方式来处理SAML令牌?
  • 怎么做?

谢谢!



以下是我发现的一些结果,和/或答案中的一些提示:

还在搜索,请贡献!!

java web-services jax-ws saml single-sign-on

22
推荐指数
2
解决办法
9046
查看次数

签署JAX-WS SOAP请求

我想编写一个JAX-WS Web服务,使用http://www.w3.org/TR/xmldsig-core/建议来签署我的SOAP消息.

通过我在互联网上找到的东西,我写了一个JAX-WS处理程序(SOAPHandler<SOAPMessageContext>),它设法改变SOAP请求的副本:

@Override
public boolean handleMessage(SOAPMessageContext smc) {
    Boolean outboundProperty = (Boolean) smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
    SOAPMessage message = smc.getMessage();

    if (outboundProperty) {
        try {
            SOAPPart soapPart = message.getSOAPPart();
            SOAPEnvelope soapEnvelope = soapPart.getEnvelope();

            Source source = soapPart.getContent();

            Node root = null;
            Document doc22 = null;
            if (source instanceof DOMSource) {
                root = ((DOMSource) source).getNode();
            } else if (source instanceof SAXSource) {
                InputSource inSource = ((SAXSource) source).getInputSource();
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                dbf.setNamespaceAware(true);
                DocumentBuilder db = null;

                db = dbf.newDocumentBuilder(); …
Run Code Online (Sandbox Code Playgroud)

java soap jax-ws x509

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

如何用Date替换XmlGregorianCalendar?

我必须通过jax-ws公开ejb服务层.

我使用jax-ws和wsimport生成了web服务但是我被一些奇怪的东西拦住了; 日期被映射到XmlGregorianCalendar.是否可以使用经典的Java Date?你能告诉我正确的方法吗?

谢谢 .编辑:这是我使用的绑定文件:谢谢,我稍微修改了你的xml并将它与netbeans一起附加到客户端的webservice并且它工作正常.我使用的绑定:

<jaxws:bindings  node="wsdl:definitions/wsdl:types/xsd:schema"
                 xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"

                                xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"

                                xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"

                                xmlns:xsd="http://www.w3.org/2001/XMLSchema" wsdlLocation="../wsdl/localhost_8080/web_test/Testor.wsdl" >


 <jaxb:globalBindings>
          <jaxb:javaType   name="java.util.Date"
        xmlType="xsd:dateTime"
        parseMethod="lol.XsdDateTimeConverter.unmarshal"
        printMethod="lol.XsdDateTimeConverter.marshalDateTime"        
          /><jaxb:javaType 
        name="java.util.Date"
        xmlType="xsd:date"
        parseMethod="lol.XsdDateTimeConverter.unmarshal"
        printMethod="lol.XsdDateTimeConverter.marshalDate"
        />
      </jaxb:globalBindings>


</jaxws:bindings>
Run Code Online (Sandbox Code Playgroud)

web-services jax-ws

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

SOAP Web服务回调架构?

我对Web服务,JAX-WS等都很陌生,所以也许没有问题......

所以,我想实现一个Web服务来使两个系统进行通信."客户端"系统对在"服务器"系统上生成的事件感兴趣.但"客户端系统"本​​身就是不同应用程序的服务器.服务器是Java(tomcat中的WAR).客户端是.Net.

应该只有一个客户端系统,但客户端系统中有几个客户端进程,每个客户端进程都对不同类别的事件感兴趣.

我将实现服务器端和测试客户端.其他人将实现.Net代码.

运行顺序应该沿着这一行:

  1. 服务器正在运行......
  2. 客户端启动对话,"注册"到服务器,并请求一些初始数据.
  3. 服务器保留已注册客户端的端点列表
  4. 在服务器中,有一个监听器在某些事件发生时得到通知.然后,它将浏览已注册客户的列表,并将事件转发给每个客户
  5. 在某些时候,客户端可以"取消注册"不通知服务器它不再想要接收事件.

首先,这听起来像是可行的吗?

是否有一个标准的内置机制,使用SOAP(服务器上的JAX-WS,客户端的.Net可用的任何东西) - 服务器可以用来从客户端获取回调端点?

例如,我使用RMI做了一些非常相似的事情,在这种情况下,客户端可以只向自己发送远程引用,服务器可以稍后存储ant引用.

最后,是否有一个标准库来存储端点引用,make(集体)回调,并且可能使列表保持最新,删除那些没有响应的客户端,以便进行一些"ping"调用?

为清楚起见,注意:我需要的不仅仅是带回调的异步方法:来自客户端的一条消息将从服务器到客户端生成许多回调消息.

.net java web-services callback jax-ws

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

如何减少Apache CXF客户端存根对象的内存大小?

我的Web服务客户端应用程序使用Apache CXF生成客户端存根以与多个Web服务进行通信.生成的CXF Web服务存根对象具有相当大的内存占用(10 - 15个Web服务对象占用超过64 MB的内存).有没有办法减少CXF对象的占用空间?

java memory web-services cxf jax-ws

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

JAX-WS:与WSDL分离的编译模式

如果在多个Web服务中使用了相当大的模式,那么我想将XSD编译与WSDL编译分开.在一个简化的示例中,单步编译的工作原理如下:

$ wsimport -verbose service.wsdl
parsing WSDL...

Generating code...

org/example/wsdl/mysvc/MySvcPortType.java
org/example/wsdl/mysvc/MySvcService.java
org/example/ns1/Element1.java
org/example/ns1/ObjectFactory.java
org/example/ns1/package-info.java
...
Run Code Online (Sandbox Code Playgroud)

编译xsd并使用生成的剧集文件不起作用:

$ wsimport -b schema3.episode service.wsdl  
parsing WSDL...

[ERROR] Schema descriptor {http://www.example.org/ns1}element1 in
message part "part1" is not defined and could not be bound to Java.
Perhaps the schema descriptor {http://www.example.org/ns1}element1 is
not defined in the schema imported/included in the WSDL. You can
either add such imports/includes or run wsimport and provide the
schema location using -b switch.   line 9 of
file:...jaxepisode_element/service.wsdl
Run Code Online (Sandbox Code Playgroud)

那么如何在wsimport中使用预编译的模式呢?

附录:当包含在另一个模式中时使用该剧集并避免新的编译(d3.jar包含来自schema3 + …

java xsd wsdl jax-ws jaxb

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