相关疑难解决方法(0)

如何在Java中使用SOAP Web服务

有人可以帮我一些关于如何在Java中使用Web服务WSDL的链接和其他方面吗?

java xml soap java-ee

14
推荐指数
4
解决办法
12万
查看次数

"包javax.xml.soap在模块java.xml.ws中声明,它不在模块图中"

所以我在Working Soap客户端示例中使用SOAP示例,将其放入文件中SOAPClientSAAJ.java,并尝试编译它(Debian上的Openjdk 9):

t@h ~/javatest> javac SOAPClientSAAJ.java 
SOAPClientSAAJ.java:1: error: package javax.xml.soap is not visible
import javax.xml.soap.*;
                ^
  (package javax.xml.soap is declared in module java.xml.ws, which is not in the module graph)
1 error
Run Code Online (Sandbox Code Playgroud)

谷歌搜索后,我发现编译和运行为

t@h ~/javatest> javac --add-modules java.xml.ws SOAPClientSAAJ.java
t@h ~/javatest> java --add-modules java.xml.ws SOAPClientSAAJ
Run Code Online (Sandbox Code Playgroud)

作品.有关一般背景,请参阅此视频:https://www.youtube.com/watch?v = y8bpKYDrF5I&t = 20m17s

现在,问题:

  1. 编译器不应该自动添加模块java.xml.ws吗?(因为它显然知道它是必需的)这是javax.xml.soap中的一个错误吗?
  2. 为什么我的手册页中没有记录--add-modules选项?(Debian中的openjdk 9)
  3. 我应该在.java文件中写什么来自动添加java.xml.ws模块?

java

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

在有效的SOAP SAAJ信封中使用默认命名空间

这两条肥皂信息有效吗?不同的部分是命名空间属性xmlns ="http://www.sigvalue.com/acc".第一个soap是一个样本,第二个是由java代码生成的,用于生成相同的soap消息.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
  <GetNGPList xmlns="http://www.sigvalue.com/acc">
  <UserData>
    <senderId>string</senderId>
    <channelId>string</channelId>
    <timeStamp>dateTime</timeStamp>
  </UserData>
  <zipCode>string</zipCode>
</GetNGPList>
 </soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

.

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetNGPList>
  <UserData xmlns="http://www.sigvalue.com/acc">
    <senderId>string</senderId>
    <channelId>string</channelId>
    <timeStamp>dateTime</timeStamp>
  </UserData xmlns="http://www.sigvalue.com/acc">
  <zipCode>string</zipCode>
</GetNGPList>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)

如果第二个肥皂无效,我怎么能和第一个肥皂一样?GetNGPList.addNamespaceDeclaration("xmlns"," http://www.sigvalue.com/acc "); 这条线不能按预期工作.这是JAVA代码:

    MessageFactory messageFactory = MessageFactory.newInstance();
    SOAPMessage soapMessage = messageFactory.createMessage();

    SOAPPart soapPart = soapMessage.getSOAPPart();


    // SOAP Envelope
    SOAPEnvelope envelope = soapPart.getEnvelope();
    envelope.addNamespaceDeclaration("xsi", gXSIServerURI);
    envelope.addNamespaceDeclaration("xsd", gXSDServerURI);

        // SOAP Body
    SOAPBody soapBody = envelope.getBody();
    SOAPElement GetNGPList =  soapBody.addChildElement("GetNGPList"); …
Run Code Online (Sandbox Code Playgroud)

java xml soap web-services saaj

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

如何为SOAPBody添加子节点?

我看到了Working Soap客户端示例.但是当我为soapbody添加子节点时,它会抛出异常.

这是错误:

线程"main"中的异常com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl:无法找到前缀ns3的命名空间

这是SOAPrequest的代码:

MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody soapBody = envelope.getBody();
SOAPElement node1 = soapBody.addChildElement("lookupEligibility","ns3");
Run Code Online (Sandbox Code Playgroud)

如何解决它.谢谢!!!!

java soap

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

使用https url的Jax-ws最终为http

我试图通过https使用JAX-WS调用Web服务(使用C#开发).我试过通过SoapUI设置一个调用,这是有效的.

但是,当尝试通过生成的jax-ws客户端执行相同操作时,我得到的只是301响应.这类似于我使用带有http url到同一服务的SoapUI,而wireshark告诉我,我做了一个HTTP(HTTP/XML)POST操作.这让我相信,由于某种原因,我生成的JAX-WS客户端尝试通过http而不是https调用.

例示代码:

 new MyServiceInterface(new URL("https://acme.com/services/MyService.svc?wsdl"))
                       .getMyPort().test();
Run Code Online (Sandbox Code Playgroud)

如您所见,我https在创建客户端时提供了一个URL.还有什么需要确保JAX-WS使用https吗?命名空间URI都是http,这会导致问题吗?

更新:

我已经使用接受的答案中的指南在问题中实现了对服务的SOAP请求:工作Soap客户端示例 几乎重复了来自SoapUI的信息,现在它给了我一个适当的200响应.

更新2:

在调试我的JAX-WS客户端时,我找到了这个属性:

"javax.xml.ws.service.endpoint.address" -> "http://acme.com/services/MyService.svc"
Run Code Online (Sandbox Code Playgroud)

这有http,而不是https.有关?

更新3:

使用调试器将"javax.xml.ws.service.endpoint.address"更改为https url而不是http时,我的客户端可以正常工作.但为什么它开始是http?

java https jax-ws

0
推荐指数
1
解决办法
2619
查看次数

标签 统计

java ×5

soap ×3

xml ×2

https ×1

java-ee ×1

jax-ws ×1

saaj ×1

web-services ×1