gpt4 book ai didi

Java 端点 - Perl 消费者 Web 服务

转载 作者:行者123 更新时间:2023-12-01 04:42:01 24 4
gpt4 key购买 nike

我在从 Perl 客户端 (activePerl 5.16) 调用 java 端点(下面的代码)时遇到问题。 这些代码片段来自《Java Web Services Up And Running》一书

package ch01.ts;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

@WebService
@SOAPBinding(style=Style.RPC)
public interface TimeServer {

@WebMethod
String getTimeAsString();

@WebMethod
long getTimeAsElapsed();
}
<小时/>
package ch01.ts;

import java.util.Date;
import javax.jws.WebService;

@WebService(endpointInterface="ch01.ts.TimeServer")
public class TimeServerImpl implements TimeServer {

public String getTimeAsString() {
return new Date().toString();
}

public long getTimeAsElapsed() {
return new Date().getTime();
}
}
<小时/>
package ch01.ts;

import javax.xml.ws.Endpoint;

public class TimeServerPublisher {
public static void main(String[] args) {
Endpoint.publish("http://127.0.0.1:9876/ts", new TimeServerImpl());
}
}
<小时/>

还有 Perl 消费者:

use SOAP::Lite;

my $url = 'http://127.0.0.1:9876/ts?wsdl';
my $service = SOAP::Lite->service($url);

print "\nCurrent time is: ",$service->getTimeAsString();
print "\nElapsed miliseconds from the epoch: ", $service->getTimeAsElapsed();

当我调用 Web 服务时,我得到以下堆栈跟踪:

maj 04, 2013 10:21:40 AM com.sun.xml.internal.ws.transport.http.HttpAdapter$HttpToolkit    handle
SEVERE: Couldn't create SOAP message. Expecting Envelope in namespace http://schemas.xmlsoap.org/soap/envelope/, but got http://schemas.xmlsoap.org/wsdl/soap/
com.sun.xml.internal.ws.protocol.soap.VersionMismatchException: Couldn't create SOAP message. Expecting Envelope in namespace http://schemas.xmlsoap.org/soap/envelope/, but got http://schemas.xmlsoap.org/wsdl/soap/
at com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(Unknown Source)

我认为soap版本是问题所在,上面的例子是1.1,当我将客户端代码更改为

my $service = SOAP::Lite->service($url)->soapversion('1.2');

然后抛出不同的错误

com.sun.xml.internal.ws.server.UnsupportedMediaException: Unsupported Content-Type: application/soap+xml; charset=utf-8 Supported ones are: [text/xml]

我需要处理信封问题或内容类型方面的帮助。我将不胜感激任何指导、代码和其他任何可以提供帮助的东西。

最佳答案

我不太确定 Perl->Soap API,但对于客户端版本为 1.1 的第一种情况,您可能还需要在某处提及 namespace 。

可能就像

server->setNamespace() //or
SOAP::Lite->service($url,"<namespace>"); //please search for perl web service client examples

对于第二种情况(1.2),服务需要文本,并且您的 api 发送肥皂编码或其他内容。

引用http://www.herongyang.com/Web-Services/Perl-SOAP-1-2-Unsupported-Media-Type-application-soap.html

这可能会有所帮助

  my $client = SOAP::Lite->new()
->soapversion('1.2')
->envprefix('soap12')
->default_ns('http://xmlme.com/WebServices')
->on_action( sub {join '/', @_} )
->readable(true)
->proxy('http://www.xmlme.com/WSShakespeare.asmx');

http://www.herongyang.com/Web-Services/Perl-SOAP-1-2-Request-Differences-SOAP-1-1-and-1-2.html

希望对你有帮助

关于Java 端点 - Perl 消费者 Web 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16372686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com