Tag: jax ws

JAX-WS和Joda-Time?

如何编写JAX-WS服务,以便@WebMethod的@WebParam是像DateTime这样的Joda-Time类? 参数上的@XmlTypeAdapter会起作用吗? 我正在部署到GlassFish 2.1。 让我澄清一下这个问题,因为到目前为止这两个答案都集中在将自定义类型绑定到现有的JAXB类上,这与我要问的问题有关。 如何使以下@WebService接受joda DateTime对象作为参数? import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.jws.soap.SOAPBinding; import org.joda.time.DateTime; @WebService @SOAPBinding(style = SOAPBinding.Style.RPC) public interface Resender { @WebMethod void resend( @WebParam(name = “start”) DateTime start, @WebParam(name = “end”) DateTime end ); }

如何获取SOAP标头

这是请求 someId … 我想得到那个userId 。 我试过这个 private List getHeaders() { MessageContext messageContext = context.getMessageContext(); if (messageContext == null || !(messageContext instanceof WrappedMessageContext)) { return null; } Message message = ((WrappedMessageContext) messageContext).getWrappedMessage(); return CastUtils.cast((List) message.get(Header.HEADER_LIST)); } private String getHeader(String name) { List headers = getHeaders(); if (headers != null) { for (Header header : headers) { […]

这个JAX-WS客户端调用线程是否安全?

由于WS客户端服务和端口的初始化需要很长时间,我喜欢在启动时初始化它们并重用相同的端口实例。 初始化看起来像这样: private static RequestContext requestContext = null; static { MyService service = new MyService(); MyPort myPort = service.getMyServicePort(); Map requestContextMap = ((BindingProvider) myPort).getRequestContext(); requestContextMap = ((BindingProvider)myPort).getRequestContext(); requestContextMap.put(BindingProvider.USERNAME_PROPERTY, uName); requestContextMap.put(BindingProvider.PASSWORD_PROPERTY, pWord); rc = new RequestContext(); rc.setApplication(“test”); rc.setUserId(“test”); } 我class上某个地方的电话: myPort.someFunctionCall(requestContext, “someValue”); 我的问题:这个电话会是线程安全的吗?

没有WSDL文档文件的JAX-WS客户端

我正在使用webbevice soa,netbeans(jax-ws)我使用netbeans自动生成客户端,所有运行正常,但我看到wsdl总是在客户端运行时下载。 在生产中我不想暴露wsdl,我试图修改客户端不需要wsdl,所有我的意图都错了,我发现这个: WebService_Service svc = new WebService_Service( null, new QName(“http://www.example.com/ws”, “WebService”)); WebService port = svc.getPort(WebService.class); BindingProvider bindingProvider = (BindingProvider) port; bindingProvider.getRequestContext() .put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, “http://www.example.com/real_endpoint_url_goes_here”); 但是当第一行执行时我发现了这个例外: Message: El contenido no está permitido en el prólogo. at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.wrapException(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.next(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextContent(Unknown Source) at com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextElementContent(Unknown Source) at com.sun.xml.internal.ws.wsdl.parser.RuntimeWSDLParser.hasWSDLDefinitions(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) […]

自定义SOAP响应的JAX-WS前缀

目标 我正在为一个相当古老(但可悲的是不可改变的)界面实现一个Web服务。 我有一个问题,即调用我的服务的客户端需要SOAP响应中的某个命名空间,并且我很难将其更改为匹配。 考虑一个hello world示例,我想要这个: Hello Catchwa! 看起来像这样: Hello Catchwa! 我找到了类似于我在这里尝试的东西,但是我无法获得类似的代码来正确执行。 (我想坚持使用Metro,而不必更改为cxf或轴) 执行 我返回JAXBRIContext的JAXBContextFactory实现如下所示: import com.sun.xml.bind.api.JAXBRIContext; import com.sun.xml.bind.api.TypeReference; import com.sun.xml.ws.api.model.SEIModel; import com.sun.xml.ws.developer.JAXBContextFactory; import java.util.ArrayList; import java.util.List; import javax.xml.bind.JAXBException; import javax.xml.namespace.QName; public class HelloJaxbContext implements JAXBContextFactory { @Override public JAXBRIContext createJAXBContext(SEIModel seim, List classesToBind, List typeReferences) throws JAXBException { List classList = new ArrayList(); classList.addAll(classesToBind); List […]

JAX-WS密码类型PasswordText

我有一个简单的命令行Java JAX-WS应用程序来测试SOAP请求,但是服务器期望密码类型是PasswordText,我很难理解如何设置它… 代码如下: @WebServiceRef private static final HelloService helloService = new HelloService(url, new QName( URL, “HelloService”)); public static void main(final String… args) { try { final HelloPort helloPort = helloService.getHelloPort(); final BindingProvider hB = ((BindingProvider) helloPort); hB.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, END_POINT_ADDRESS); hB.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, USERNAME); hB.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, PASSWORD); … 我已经使用SOAP-UI测试了请求,所以我知道它正在运行。 任何有关设置密码类型的帮助将不胜感激。 谢谢。

RESTful webservice:如何在java中设置头文件以接受Access-Control-Allow-Origin允许的XMLHttpRequest

我有一个RESTful webservice,它将返回字符串,它是用Java(JAX-WS)编写的。 我的问题是当我使用以下URL向该webservice发送请求时: http://localhost:8080/project/webservices/getlist/getListCustomers 在控制台中,它给出了以下错误消息: XMLHttpRequest无法加载url Access-Control-Allow-Origin不允许使用origin localhost 我该如何处理这个问题? Java代码: @GET @Path(“/getsample”) public Response getMsg() { String output = “Jersey say : ” ; return Response.status(200).entity(output).build(); }

我们可以在Web服务类中实现方法重载吗?

我想在Java Web服务类中实现方法重载,如下所示: public String myMethod(User user) { // My code } public String myMethod(User[] user) { for(int i=0; i<user.length; i++) { myMethod(user[i]); } } 如果我将单个User对象转发到myMethod() ,它应该触发第一个方法,如果我发送一个User数组,它应该触发第二个方法。 在WSDL文件中,它只显示一个方法。 但是,如果我尝试为两个调用调用@WebMethod(operationName=””) ,我将无法生成WSDL文件。

使用Jax-WS端点发布WS

我构建了一个最小的Web服务,并使用javax.xml.ws.Endpoint发布它。 如果我尝试在http://localhost:1234/AddService?wsdl获取WSDL,它可以正常工作。 试图在http://192.168.0.133:1234/AddService?wsdl收到它,我什么都没收到。 该地址与localhost相同。 是否有可能在不提供地址的情况下发布网络服务? package test; import javax.jws.WebMethod; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class AddService { @WebMethod public int add(int a, int b){ return a+b; } public static void main(String[] args ){ Endpoint.publish(“http://localhost:1234/AddService”, new AddService()); } } 将代码更改为 Endpoint.publish(“http://192.168.0.133:1234/AddService”, new AddService()); 获取IP地址上的wsdl但不是localhost。 是不是只有定义端口的可能性?

JAXB元素既可选又可以为nillable

我重新格式化了这个问题,希望能让我的意图更加清晰。 建筑 我正在编写一些我将使用JAX-WS自己发布的Web服务。 我们已经使用了一段时间的过程是首先编写一个仅定义请求和响应对象的模式。 这将被发送给客户以批准xml消息的结构。 我不想自己编写整个wsdl,因为它比基本模式更复杂。 接下来,我使用JAXB命令xjc根据模式中的请求和响应类型生成类。 然后,我将此类用作参数,并在JAX-WS带注释的端点类上返回类型。 现在这给了我一个我可以打电话的网络服务。 它使我能够更好地控制发送和返回的xml,但也可以自动完成写入完整wsdl所需的重复。 问题 在模式中,我有一个这样的元素: 所以我想区分用户设置null或空白。 然后生成的类具有此属性。 @XmlElementRef(name = “myElement”, namespace = “/mynamespace”, type = JAXBElement.class) protected JAXBElement myElement; 这样做的结果是元素既不​​是可填充的也不是可选的。 JAX-WS作为wsdl的一部分写入的模式已将元素设置为必需而不是nillable,如果我关闭模式validation,我仍然无法将nil传递给我的对象。 事情尝试了 如果我将其更改为必需和​​可空,那么我将获得此生成的代码。 @XmlElement(required = true, nillable = true) protected String myElement; 如果我将其更改为可选而不是nillable,那么我将获得此生成的代码。 protected String myElement 因此,如果您使用JAXB,您可以使用或不是两者。 完全令人失望! 我也尝试手动将生成的类更改为这样。 @XmlElementRef(name = “myElement”, namespace = “/mynamespace”, type = JAXBElement.class, […]