标签: jax-ws

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

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

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

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

java soap web-services jax-ws

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

使用纯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万
查看次数

有什么方法可以使用JAX-WS从Javadoc生成WSDL文档吗?

我希望可以使用某种类型的扩展(尽管我认为我的希望是愚蠢的乐观).

   /**
     * <p>
     * Gets the {@link ResultObject} given the identifier. The following
     * fields are not available for some users and will contain a null value:
     * </p>
     * 
     * <ul>
     * <li>{@code resultObject.comment}</li>
     * <li>{@code resultObject.anotherObject.actionById}</li>
     * <li>{@code resultObject.anotherObject.actionByName}</li>
     * </ul>
     * 
     * <p>
     * The {@code daysInPurgatory} value will be {@code -1} when not
     * applicable
     * </p>
     * 
     * @param requestUser
     *            the user initiating the request
     * @param identifier
     *            the id of the …
Run Code Online (Sandbox Code Playgroud)

java documentation wsdl jax-ws wsgen

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

如何在java中编写有效的Web服务

虽然这可能看起来像Java Web Services的副本,但我想知道从哪里开始并继续.过去,我花了很多时间来寻找从哪里开始,但我无法做到.在阅读有关Web服务的页面时,有这么多的术语和混乱(至少对我而言!).有很多术语 - 比如JAX-RPC, JAX-WS, Axis, Rest, Servlet as WebService, EJB'sWeb Service和其他我不知道的术语.此用户组是否可以整合并提供易于理解和遵循的Java Web服务的高级概述?感谢您的善意,感谢您的帮助.

java axis2 web-services jax-ws jax-rpc

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

在客户端使用JAX-WS跟踪SOAP请求/响应

我正在使用JAX-WS参考实现(2.1.7),我想在客户端跟踪SOAP请求/响应.实际上,我需要的是在收到响应时检查一些Http头.

按照以前的问题(使用JAX-WSJava JAX-WS Web服务客户端跟踪XML请求/响应:如何记录日志请求和响应xml?),我创建了自己的处理程序,以便在发送请求和接收请求时进行记录响应:

public class SHandler implements SOAPHandler<SOAPMessageContext>
{

  private static final Logger log = Logger.getLogger(SHandler.class);

  @Nullable
  @Override
  public Set<QName> getHeaders()
  {    
    log.debug(">>>>>>>>>>> GetHeaders");
    return null;    
  }

  @Override
  public boolean handleMessage(SOAPMessageContext soapMessageContext)
  {
    log.debug(">>>>>>>>>>> HandleMessage");
    return true;
  }

  @Override
  public boolean handleFault(SOAPMessageContext soapMessageContext)
  {
    log.debug(">>>>>>>>>>> HandleFault");
    return true;
  }

  @Override
  public void close(MessageContext messageContext)
  {
    log.debug(">>>>>>>>>>> Close");    
  }
}
Run Code Online (Sandbox Code Playgroud)

我在服务初始化期间将处理程序添加到处理程序链:

@WebServiceClient(name = "MyService", targetNamespace = "http://www.whatever.com/", wsdlLocation = "file:/path/to/wsdl")
public class …
Run Code Online (Sandbox Code Playgroud)

java web-services jax-ws

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

WebServices:裸vs包裹?

我从一些现有的wsdl中生成了一些WebServices

我使用Maven来做这个,但是生成了一些web服务

@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.BARE)  
Run Code Online (Sandbox Code Playgroud)

和其他人一起

@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED) 
Run Code Online (Sandbox Code Playgroud)

Jaxb或xjc会自动执行此操作吗?因为我在wsdls中没有任何差异......

java web-services jax-ws

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

签名和加密政策

我需要实现一个jax-ws客户端.

以下是提供者文档关于安全性的内容

目前,我们在http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdf上使用SOAP Message Security 1.0版规范.

本标准使用另外两个来自W3C规范:
XMLENC(http://www.w3.org/TR/2002/REC-xmlenc-core-20021210/)
和XMLDSIG(http://www.w3.org/TR/2002)/REC-xmldsig-core-20020212 /)

对于签名,使用指定X509的"URI"和"valueType"的直接"引用"的"SecurityTokenReference"是强制性的.对于加密,我们也推荐它,但我们也按优先顺序支持对keyIdentifier,X509IssuerSerial或keyName的引用.

加密和签名的块必须是"body"标记.

我们建议使用:"rsa-sha1"用于签名,"rsa-1_5"用于加密密钥,"tripledes-cbc"用于加密正文.

所以我提出了以下政策(从netbeans生成).但是......我看起来并不合适.Web服务尚无法访问,但我不确定规范版本是否匹配.我在这个问题上看了很多,但我仍然有些困惑.这个政策看起来不错吗?

<wsp1:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoapPolicy">
    <wsp1:ExactlyOne>
        <wsp1:All>
            <sp:TransportBinding>
                <wsp1:Policy>
                    <sp:TransportToken>
                        <wsp1:Policy>
                            <sp:HttpsToken RequireClientCertificate="false"/>
                        </wsp1:Policy>
                    </sp:TransportToken>
                    <sp:Layout>
                        <wsp1:Policy>
                            <sp:Lax/>
                        </wsp1:Policy>
                    </sp:Layout>
                    <sp:AlgorithmSuite>
                        <wsp1:Policy>
                            <sp:TripleDesRsa15/>
                        </wsp1:Policy>
                    </sp:AlgorithmSuite>
                </wsp1:Policy>
            </sp:TransportBinding>
            <sp:Wss10/>
            <sp:EndorsingSupportingTokens>
                <wsp1:Policy>
                    <sp:X509Token sp:IncludeToken="http://schemas.xmlsoap.org/ws/2005/07/securitypolicy/IncludeToken/AlwaysToRecipient">
                        <wsp1:Policy>
                            <sp:WssX509V3Token10/>
                        </wsp1:Policy>
                    </sp:X509Token>
                </wsp1:Policy>
            </sp:EndorsingSupportingTokens>

        </wsp1:All>
    </wsp1:ExactlyOne>
</wsp1:Policy>
<wsp:Policy wsu:Id="ListeOperationsPeriodeSoapBindingSoap_perform_Input_Policy">
    <wsp:ExactlyOne>
        <wsp:All>
            <sp1:SignedEncryptedSupportingTokens>
                <wsp:Policy>
                    <sp1:X509Token sp1:IncludeToken="http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/IncludeToken/AlwaysToRecipient">
                        <wsp:Policy>
                            <sp1:WssX509V3Token10/>
                        </wsp:Policy>
                    </sp1:X509Token>
                </wsp:Policy>
            </sp1:SignedEncryptedSupportingTokens>
        </wsp:All>
    </wsp:ExactlyOne>

</wsp:Policy>
Run Code Online (Sandbox Code Playgroud)

编辑:我无法用wsit发送预期的消息.例如,使用Netbeans向导,如果不使用寻址,我无法获得加密的标头.这应该是可能的吗?

我用一个旧的轴1类和wss4j攻击了一些东西,它有效,但它很难看,而且我宁愿使用更具前瞻性的东西.

java ws-security web-services java-metro-framework jax-ws

18
推荐指数
1
解决办法
2822
查看次数

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

目标

我正在为一个相当古老(但可悲的是不可改变的)界面实现一个Web服务.我有一个问题,即调用我的服务的客户端需要SOAP响应中的某个命名空间,并且我很难将其更改为匹配.

考虑一个问候世界的例子,我想要这个:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:helloResponse xmlns:ns2="http://test/">
         <return>Hello Catchwa!</return>
      </ns2:helloResponse>
   </S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <customns:helloResponse xmlns:customns="http://test/">
         <return>Hello Catchwa!</return>
      </customns:helloResponse>
   </S:Body>
</S:Envelope>
Run Code Online (Sandbox Code Playgroud)

我找到了类似于我在这里尝试的东西,但是我无法获得类似的代码来正确执行.(我想坚持使用Metro,而不必更改为cxf或轴)


执行

我的实现JAXBContextFactory返回JAXBRIContext如下所示:

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<Class> classesToBind, List<TypeReference> typeReferences) throws JAXBException {
    List<Class> classList = new ArrayList<Class>();
    classList.addAll(classesToBind);

    List<TypeReference> refList = new ArrayList<TypeReference>();
    for (TypeReference …
Run Code Online (Sandbox Code Playgroud)

java soap jax-ws jaxb

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

Java JAX-WS Web服务客户端:如何记录日志请求和响应xml?

我创建了该实现的LoggingHandler实现SOAPHandler<SOAPMessageContext>

它应该在每次handleMessage触发时记录(在我的情况下从不调用它)

MyService service = new MyService();
MyServicePort port = service.getPortType();
Run Code Online (Sandbox Code Playgroud)

现在我试试这个:

BindingProvider bindingProvider = (BindingProvider)port;
bindingProvider.getBinding().getHandlerChain().add(new LoggingHandler());
Run Code Online (Sandbox Code Playgroud)

我没有看到任何请求/响应xml.

你能建议任何解决方案吗?也许有另一种方式来查看输出和请求XML?

java web-services jax-ws

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

构造函数Service(URL,QName,WebServiceFeature [])未定义

我为我的客户端Web服务运行wsimport后,构造函数服务(URL,QName,WebServiceFeature [])是未定义的错误.我正在使用JDK 1.6.请帮忙.

错误

jax-ws wsimport

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