标签: jax-ws

如何使用JAXB编组注释为@XmlAttachmentRef的DataHandler?

我正在尝试编组一个DataHandler具有JAXB(2.1.12)字段的对象.对于流媒体支持,DataHandler使用@进行注释XmlAttachmentRef.通过Web服务进行序列化和流式处理(JBoss上的Metro)运行良好,但是使用JAXB进行简单的编组却没有.

这是一个精简的例子:

public class DataHandlerAttachmentSerialization {

    @XmlRootElement
    static class RootObject {
        @XmlElement
        @XmlAttachmentRef // Works without this, but required for streaming 
        DataHandler dataHandler = new DataHandler(
                new com.sun.xml.ws.util.ByteArrayDataSource(
                " ".getBytes(), "application/octet-stream"));
    }

    @Test
    public void test() throws JAXBException {
        JAXBContext context = JAXBContext.newInstance(RootObject.class);
        Marshaller marshaller = context.createMarshaller();
        StringWriter writer = new StringWriter();
        marshaller.marshal(new RootObject(), writer);
        Assert.assertNotNull(writer.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此测试会产生以下堆栈跟踪:

javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.xml.bind.api.AccessorException: java.lang.NullPointerException]
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:318)
    at com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:244)
    at javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:96)
    ...
Caused …
Run Code Online (Sandbox Code Playgroud)

java xml web-services jax-ws jaxb

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

JAX-WS超时问题

我在Sun轻量级http服务器上发布了Web服务端点.服务器正在运行ThreadPool执行程序以进行连接(Executors.newCachedThreadPool()).我也使用常规的Web服务客户端(也是JAX-WS).

似乎每超过5分钟的呼叫,服务器(或客户端)结束当前的调用线程并打开一个新的调用线程.在服务器中,它看起来像是建立了新连接并尝试运行相同的操作.

这只发生一次,意味着"第二次通话"可能超过5分钟.

连接是否有默认超时?有没有办法配置它?

java web-services jax-ws

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

如何使用JAXWS和APT自定义日期/时间绑定?

我使用JAXWS 2.1.7,使用一些类来运行JAXWS的'apt'来生成WSDL.对于日期,我使用

@XmlSchemaType(name="time")  
private Date wakeupTime;
Run Code Online (Sandbox Code Playgroud)

并且这会生成一个带有xs:time的模式,但是当这一切都以XML形式出现时,值就像

<wakeupTime>1901-01-01T01:00:00 +10</wakeupTime>
Run Code Online (Sandbox Code Playgroud)

我只想要时间部分!我想我想使用自定义转换器来说xs:time + java.util.Date应该以这样的方式打印和解析,但我看不出我可以将绑定文件传递给apt例程.我不能(出于历史和其他原因)使用XMLGregorianCalendar- 它必须是一个java.util.Date.如何在jaxb中为apt工具指定自定义绑定

java binding apt jax-ws jaxb

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

每次Web服务调用自动传递cookie

我有一个独立的Web服务客户端.在调用任何Web方法时,必须将附加的"cookie"字符串隐式(不是作为Web方法参数)传递给WS.另一端的WS必须能够获取字符串并使用它.怎么能实现这一目标?

我以下列方式调用服务:

Service srv = Service.create(new URL(WSDL), QNAME);
myClassPort = srv.getPort(MyClass.class);
Run Code Online (Sandbox Code Playgroud)

我需要的是在第一行之前放置一些代码,这会使客户端每次通过myClassPort调用一些远程方法时都会发送这个"cookie"字符串.谢谢.

soap web-services jax-ws

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

在JBoss AS 7.1.X上使用JAX-WS webservices和Spring 3.0.X

我在JBoss AS Final 7.1.1上使用Spring 3.0.6部署JAX-WS Web服务时遇到了一些问题.

我在本教程中尝试了两种第一种方法:http://www.javacodegeeks.com/2010/11/jaxws-with-spring-and-maven-tutorial.html

当我使用第一种方法(扩展SpringBeanAutowiringSupport并在web.xml中声明servlet)时,应用程序正确部署,但我在Web服务中注入的bean是Null.

使用SimpleJaxWsServiceExporter的第二个方法我在部署时遇到错误:

10:09:33,012 ERROR [org.springframework.web.context.ContextLoader] (MSC service thread 1-2) Context initialization failed: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter#0' defined in ServletContext resource [/WEB-INF/generic-applicationContext.xml]: Invocation of init method failed; nested exception is javax.xml.ws.WebServiceException: java.lang.RuntimeException: java.net.BindException: Address already in use: bind
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) [spring-beans-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) [spring-beans-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) [spring-beans-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293) [spring-beans-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) [spring-beans-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290) [spring-beans-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192) [spring-beans-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) [spring-beans-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) [spring-context-3.0.6.RELEASE.jar:3.0.6.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) [spring-context-3.0.6.RELEASE.jar:3.0.6.RELEASE] …
Run Code Online (Sandbox Code Playgroud)

spring jax-ws autowired jboss7.x

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

在Java XML Web服务中防止枚举

我喜欢Enum类型安全,它也使代码更具可读性.Enum每当有机会我总是会利用.

当我需要将这些代码公开为Web服务时,问题就开始了.例如,如果我有这样的枚举:

public enum Language {
    ENGLISH(1),
    BAHASA_MALAYSIA(2);
}
Run Code Online (Sandbox Code Playgroud)

它将在wsdl中公开,如下所示:

<xs:simpleType name="language">
<xs:restriction base="xs:string">
  <xs:enumeration value="ENGLISH"/>
  <xs:enumeration value="BAHASA_MALAYSIA"/>
  </xs:restriction>
</xs:simpleType>
Run Code Online (Sandbox Code Playgroud)

如果将来如果我决定添加一种新语言我将遇到麻烦,wsdl文件会有所不同,它会破坏旧客户端.

我的问题,如何防止枚举在wsdl中作为枚举公开?我想将它暴露为简单的数据类型Stringint.

如果重要的话,我正在使用JBoss WS.

java enums web-services jax-ws jbossws

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

将Web服务公开为无状态会话bean的任何线程安全性好处?

将Web服务公开为无状态会话bean是否存在与线程安全相关的好处?
(如果我错了,请纠正我)但我认为Web服务不是线程安全的,并且像Servlet一样,服务器只创建一个Web服务类实例(每个请求不是一个实例).

我不知道它们是否是从像无状态bean这样的bean池中分配的 - 是由app服务器提供的.我试图找到是否将@Stateless annoation与已经使用@WebService注释注释的Web服务一起使用 - 这将迫使应用服务器开始为每个传入请求从池中分配它们.这样我就知道我会为每个传入的请求创建一个单独的实例吗?

annotations web-services jax-ws stateless-session-bean java-ee

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

JAX-WS WebServiceContext保持为null(注释注入失败)

我尝试将我的应用程序部署到带有Metro/Jersey和Glassfish 3.1.2的Tomcat 6,但访问WebServiceContext资源总是会导致空指针异常,除非我使用自动生成的Glassfish测试门户测试应用程序.

这是我写的一个简单的测试方法,用于验证:

import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@WebService
@Path("/test")
public class Test {
    @Resource
    WebServiceContext wsContext;

    @GET
    @Produces("text/plain")
    @Path("/hello")
    public String hello() {
        MessageContext mc = wsContext.getMessageContext();   // NULL POINT HAPPENS HERE!
        ServletContext servletContext = (ServletContext) 
                mc.get(
                        MessageContext.SERVLET_CONTEXT);
        String s = servletContext.getRealPath("/WEB-INF");
        return "Real Path: " + s;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里是相应的web-xml(主要由Eclipse自动生成):

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>WebApp</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file> …
Run Code Online (Sandbox Code Playgroud)

web-services dependency-injection glassfish jax-ws

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

通过客户端存根访问WSDL时Java InaccessibleWSDLException

我正在尝试为Exchange Web服务编写自定义Java客户端.我已经使用生成的客户端存根wsimport工具,说明在这里从EWS的Services.wsdl文件.现在我编写了使用这些存根的代码.我得到以下异常:

Exception in thread "main" com.sun.xml.internal.ws.wsdl.parser.InaccessibleWSDLException: 2   counts of InaccessibleWSDLException.

java.io.IOException: Got Server returned HTTP response code: 401 for URL: https://host.domain.com/ews/Services.wsdl while opening stream from https://host.domain.com/ews/Services.wsdl
java.io.IOException: Got Server returned HTTP response code: 401 for URL: https://host.domain.com/ews/Services.wsdl?wsdl while opening stream from https://host.domain.com/ews/Services.wsdl?wsdl

at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.tryWithMex(Unknown Source)
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source)
at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.parse(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.parseWSDL(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source)
at com.sun.xml.internal.ws.client.WSServiceDelegate.<init>(Unknown Source)
at com.sun.xml.internal.ws.spi.ProviderImpl.createServiceDelegate(Unknown Source)
at javax.xml.ws.Service.<init>(Unknown Source)
at com.microsoft.schemas.exchange.services._2006.messages.ExchangeWebService.<init>(ExchangeWebService.java:58)
at com.xyz.abc.EWSJavaAPI.ExchangeAuthenticator.getExchangeServicePort(ExchangeAuthenticator.java:33)
at com.xyz.abc.test.ExchangeDevelopmentTest.main(ExchangeDevelopmentTest.java:35)
Run Code Online (Sandbox Code Playgroud)

我们在上面看到的ExchangeDevelopmentTest是一个使用另一个类的客户端,而另一个类 …

java wsdl jax-ws exchangewebservices

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

wsgen'未找到班级'

这是我的java项目的设置

在此输入图像描述

我正在尝试通过cmd运行wsgen:

wsgen -keep -cp . com.library.webservice.HelloWorldImplementation

但是我收到了错误

Class not found: "com.library.webservice.HelloWorldImplementation"

此外,该命令正在运行 C:\ ... \WebServices Test\src

知道我做错了什么吗?

java jax-ws wsgen

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