标签: jax-ws

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);
        ...
Run Code Online (Sandbox Code Playgroud)

我已经使用SOAP-UI测试了请求,所以我知道它正在运行.任何有关设置密码类型的帮助将不胜感激.

谢谢.

java soap jax-ws wsse

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

如何判断哪个jdk包含哪些版本的JAX-WS

在最新版本的JAXB(2.2.1)中有一个修复程序.我正在尝试确定它是否包含在最近的Java 6更新中.有没有办法告诉哪些版本的JVM/JRE/JDK包含哪些版本的JAX-WS/JAXB?

查看Sun/Oracle的站点,我可以查看最新版Java SE 6 的发行说明,但我无法分辨哪些版本的XML库包含在内.我想我可以下载最新的JDK并运行'xjc -version',但应该有一个更好的方法(特别是如果它是在之前的版本中添加的那样 - 我不想继续下载JRE来告诉哪个是第一个与我感兴趣的JAXB版本).

java jax-ws jaxb

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

获取客户端的IP地址对于Web服务

我正在使用JAX-WS,我在检索使用Web服务的客户端信息时遇到问题.我已经找到了如何使用JAX-RPC和Apache Tomcat Axis,但没有使用JAX-WS.有没有人对此有所了解?

java ip web-services jax-ws

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

使用Jax-WS端点发布WS

我构建了一个最小的Web服务,并使用javax.xml.ws.Endpoint发布它.如果我试图获得WSDL http://localhost:1234/AddService?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());
    }
}
Run Code Online (Sandbox Code Playgroud)

将代码更改为

Endpoint.publish("http://192.168.0.133:1234/AddService", new AddService());
Run Code Online (Sandbox Code Playgroud)

获取IP地址上的wsdl但不是localhost.

是不是只有定义端口的可能性?

java web-services jax-ws endpoint

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

JAX-WS客户端是否安全?

由于WS客户端端口的初始化成本太高,我们希望重用相同的实例.我们还希望在每次调用之前在BindingProvider/RequestContext中设置不同的值.最初我们想这样做:

MyService service = new MyService(wsdlURL, name); 
MyPort myPort = service .getMyServicePort(); 
Run Code Online (Sandbox Code Playgroud)

然后,在每次调用之前执行此操作:

Map requestContext = ((BindingProvider)myPort ).getRequestContext(); 
requestContext.put(BindingProvider.USERNAME_PROPERTY, uName); 
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pWord); 
myPort.someFunctionCall();
Run Code Online (Sandbox Code Playgroud)

我的问题是,这个代码线程安全吗?JAX-WS文档似乎表明它不是线程安全的.但是,如果采取预防措施,CXF似乎也是如此.如果特别是JAX-WS和Metro不是线程安全的,有没有办法确保线程安全而不同步访问端口或ws操作?

web-services java-metro-framework jax-ws webservices-client

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

无法创建JAXBContext创建我的wsdl

我正在尝试为webservices生成我的WSDL,但是我收到此错误:

Note:   ap round: 2
Exception in thread "main" javax.xml.ws.WebServiceException: Unable to create JAXBContext
        at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.createJAXBContext(AbstractSEIModelImpl.java:153)
        at com.sun.xml.internal.ws.model.AbstractSEIModelImpl.postProcess(AbstractSEIModelImpl.java:83)
        at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(RuntimeModeler.java:244)
        at com.sun.tools.internal.ws.wscompile.WsgenTool.buildModel(WsgenTool.java:229)
        at com.sun.tools.internal.ws.wscompile.WsgenTool.run(WsgenTool.java:112)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at com.sun.tools.internal.ws.Invoker.invoke(Invoker.java:105)
        at com.sun.tools.internal.ws.WsGen.main(WsGen.java:41)
Caused by: java.security.PrivilegedActionException: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
java.lang.StackTraceElement does not have a no-arg default constructor.
        this problem is related to the following location:
                at java.lang.StackTraceElement
                at public java.lang.StackTraceElement[] java.lang.Throwable.getStackTrace()
                at java.lang.Throwable
                at java.lang.Exception
                at java.sql.SQLException
                at private java.sql.SQLException wsdb.jaxws.SQLExceptionBean.nextException
                at wsdb.jaxws.SQLExceptionBean

        at …

java web-services jax-ws wsgen

20
推荐指数
4
解决办法
6万
查看次数

如何定义以透明方式拦截所有服务的全局JAX-WS MessageHandler?

我们在JAX-WS中实现了一组Web服务,并SOAPHandler在SOAP头中添加了控制属性.今天,我们需要@HandlerChain在我们创建的每个新服务中添加注释.

这个想法是新服务实现者不需要知道@HandlerChain存在.

有没有办法配置一个Handler拦截WAR中运行的所有服务的全局?

java soap web-services jax-ws

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

使用jaxws-maven-plugin控制JAX-WS wsdlLocation属性值(绝对路径)

我有一个JAX-WS驱动的Web服务,其WSDL我们从另一个Maven模块生成一个Web服务客户端(我将调用它ws-consumer).

无论好坏,我们将"已发布的WSDL"(服务在发布时保存/生成的WSDL和XSD的版本)src/wsdl复制到我们的文件夹中ws-consumer,然后使用jaxws-maven-pluginorg.jvnet生成使用jaxws:wsimport以下内容的客户端(截断)配置:

    <plugin>
        <groupId>org.jvnet.jax-ws-commons</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.1</version>
        <executions>
            <execution>
                <!--phase>generate-sources</phase -->
                <goals>
                    <goal>wsimport</goal>
                </goals>
                <configuration>
                    <wsdlDirectory>src/main/resources/META-INF/wsdl/</wsdlDirectory>
                    <wsdlFiles>
                        <wsdlFile>MyWS/MyWS.wsdl</wsdlFile>
                    </wsdlFiles>
                </configuration>
            </execution>
        </executions>
    </plugin>
Run Code Online (Sandbox Code Playgroud)

现在,生成的客户端代码在类级别应用了以下注释:

@WebServiceClient(name = "MyWS", targetNamespace = "http://myws/blah", wsdlLocation = "**file:/C:/some/absolute/path/src/main/resources/META-INF/wsdl/MyWS/MyWS.wsdl"**)
Run Code Online (Sandbox Code Playgroud)

强调我的

正如您所希望看到的那样,wsdlLocation属性值具有硬编码的绝对路径,在部署服务时该路径将不正确.

有什么方法可以通过将其设置为just META-INF/wsdl/MyWS/MyWS.wsdl或其他值来"控制"它?

java wsdl web-services jax-ws maven

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

使用纯JAX-WS添加SOAP头对象

我正在尝试使用JAX WSPayPal Express Checkout API实现简单的Web服务客户端.PayPal Express Checkout API提供了WSDL文件,我可以使用CXF的wsdl2java实用程序从中生成Java类.

出于身份验证原因,它需要为每个请求添加SOAP Header.这个标题非常简单,应该如下所示:https: //cms.paypal.com/us/cgi-bin/?cmd = __render-content&content_ID = developer/e_howto_api_ECSOAPAPasics #id09C3I0CF0O6

WSDL类生成的包括ebay.apis.eblbasecomponents.CustomSecurityHeaderType类,它表示我需要添加到每个请求的标头.

所以问题是:如何考虑以下条件,将手动创建的CustomSecurityHeaderType类实例添加到SOAP请求的标题中:

  1. 我不是非常渴望使用com.sun.*包中的类,如答案中所述:JAX-WS - 添加SOAP标头(主要是因为不同JDK之间可能的可移植性问题)
  2. 我不想手动将该对象编组到嵌套的 javax.xml.soap.SOAPElement实例中,如下面的答案所述: 如何使用Java JAX-WS添加SOAP Header

soap web-services paypal jax-ws webservice-client

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

Jersey返回HTTP状态405 - 方法不允许

我有一个非常简单的端点使用泽西岛.我的URL是静态的,它不需要任何请求参数.它看起来像这样:

@GET
@Path("/mydata")
@Produces(javax.ws.rs.core.MediaType.APPLICATION_JSON)  
public String getData()  {
  return "{'name': 'value'}";
}
Run Code Online (Sandbox Code Playgroud)

但是,每当我请求此URL时,我总是会收到405状态代码 - 方法不允许.

奇怪的是,如果我更改@Path注释并定义路径变量,例如@Path("/chart/{blah}")它可以正常工作.

有没有人知道为什么我必须定义一个路径变量才能使它工作?我不需要路径变量,添加一个只是为了获得200响应似乎很愚蠢.

java tomcat jax-ws jersey

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