我从来没有在java中使用任何SOAP库,所以我为这个问题的新概率道歉.
我正在尝试利用Tivoli Endpoint Manager的SOAP API.我使用wsimport.exe(在jdk中提供)从提供的WSDL文件生成了必要的类.
现在我提供了大量的类,我假设它们将信息打包成xml格式,但我不确定如何处理它们.我已经阅读了所提供的文档,但它最多是模糊的.
wsimport生成的类如下:

根据文档,以下Perl代码适用于查询Tivoli的API
use SOAP::Lite;
#arguments: [hostname] [username] [password] [relevance expression]
#hostname only, e.g. ’example.com’ rather than ’http://example.com/webreports’
my $host = $ARGV[0];
my $username = SOAP::Data->name(’username’ => $ARGV[1] );
my $password = SOAP::Data->name(’password’ => $ARGV[2] );
my $expr = SOAP::Data->name(’relevanceExpr’ => $ARGV[3] );
my $service = SOAP::Lite -> uri( ’http://’ . $host . ’/webreports?wsdl’ )
-> proxy( $host );
my $result = $service -> GetRelevanceResult( $expr, $username, $password );
if( $result->fault ) {
print "faultcode: …Run Code Online (Sandbox Code Playgroud) 我知道如何在PHP中禁用WSDL-cache,但是强制重新缓存WSDL呢?
这就是我尝试的:我运行我的代码,缓存设置为禁用,并且新方法显示为受到尊重.然后我激活了缓存,但由于某种原因,我的旧的非工作wsdl再次出现.那么:我如何强制我的新WSDL覆盖我的旧缓存?
在使用WCF和OperationContracts时,我定义了以下方法:
[OperationContract]
[FaultContract(typeof(ValidationFault))]
[FaultContract(typeof(FaultException<ExceptionDetail>))]
int DoSomething(int someId, MyComplexType messageData);
Run Code Online (Sandbox Code Playgroud)
当它由WCF运行时转换为WSDL时,最终会为参数someId和messageData列出minoccurs ="0"(如果缺少这些参数,则会抛出运行时错误).
如果我使用SoapUI生成代理,我会得到如下所示的内容:
<com:DoSomething>
<!--Optional-->
<com:EventId>1</com:EventId>
<!--Optional-->
<com:myComplexType >
<com:id>1</com:id>
</com:myComplexType >
</com:DoSomething>
Run Code Online (Sandbox Code Playgroud)
MyComplexType中的id字段使用IsRequired ="true"标记为DataMemeber属性,因此公开为必需.
显然,WSDL指定参数是不可选的是可选的,但是我看不到任何明显的方法来标记OperationContract以迫使WCF根据需要识别和公开这些参数.
我有点困惑,似乎没有明显的方法这样做(阅读intellisense/msdn/google).或者我会失明并忽略一些明显的东西.
有线索吗?
我的问题与此类似.当WSDL没有定义它时,如何传递肥皂头?但是不同.
对于我使用的Web服务,所有方法都需要在SOAP标头内以明文形式发送的身份验证.但是,我的WSDL不包含任何soap标头信息.我有一个自定义平台工具,我必须使用它来从WSDL生成代码.由于标题信息不可用,我无法直接使用生成的类 - 我不想手动修改代码以适应标题.
我尝试在WSDL中指定SOAP标头但是我无法获得正确的名称空间.WSDL在这里https://stage.totalcheck.sensis.com.au/service/webservice?wsdl,SOAP标头如下:
<soapenv:Header>
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>username</wsse:Username>
<wsse:Password>password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
Run Code Online (Sandbox Code Playgroud)
有人能帮我吗?谢谢!
我是否可以在WSDL中相对于WSDL位置具有soap:address位置,或者至少相对于服务器?比如我想写:
<soap:address location="https://exampleserver.com/axis2/services/ExampleService" />
Run Code Online (Sandbox Code Playgroud)
如:
<soap:address location="/axis2/services/ExampleService" />
Run Code Online (Sandbox Code Playgroud)
这样可以更快地部署到多个服务器,例如测试服务器.此外,在axis2c的情况下,如果我希望从HTTP或HTTPS使用我的服务,使用我的服务的开发人员的生活变得更加困难,因为他们不能简单地从它的默认位置"?WSDL"导入WSDL.
我有一个Web服务,我有JAX-WS生成的客户端绑定,如下所示:
// web service client generated by JAX-WS
@WebServiceClient( ... )
public class WebService_Service extends Service {
public WebService_Service(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
WebService getWebServiceSOAP() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
我希望能够创建一个指向远程服务的实例,例如:
WebService_Service svc = new WebService_Service(
new URL("http://www.example.com/ws?wsdl"),
new QName("http://www.example.com/ws", "WebService"));
Run Code Online (Sandbox Code Playgroud)
但是下载了http://www.example.com/ws?wsdl我不想做的WSDL .
有没有办法停止下载该WSDL,但仍然指向同一个端点?
我已经尝试了两周在Perl(with WSDL::Generator)中创建一个Web服务,并用Perl编写的客户端调用它.
现在我尝试使用专门用于WSDL的库提供的示例:Soap::Lite
但是我得到一个不断出现的错误
404 file not found at c.PL at line 7.
Run Code Online (Sandbox Code Playgroud)
你能帮我解决一下吗?
这是我的代码:
WorldFunctions.pm (C:\ Perl\SOAP-Lite\WorldFunctions.pm):该类
package WorldFunctions;
sub new { bless {}, shift; }
sub Hello { my ($s, $name) = @_;
return 'Hello, ' . $name . "\n";
}
sub GoodBye { my ($s, $name) = @_;
return 'Goodbye, ' . $name . "\n";
}
Run Code Online (Sandbox Code Playgroud)
a.pl (C:\ Perl\SOAP-Lite\a.pl):创建WorldFunctions.pm类的WSDL文件
#!/usr/bin/perl
use WSDL::Generator;
my $init = {
'schema_namesp' => 'http://localhost/world/WorldFunctions.xsd',
'services' => 'WorldFunctions',
'service_name' => 'WorldFunctions', …Run Code Online (Sandbox Code Playgroud) 想象一下这个场景.
我有一个带有命名空间a/b/c的wsdl文件,它导入另一个命名空间为m/n/o的wsdl.不幸的是,它们都在其中定义了相同的ComplexTypes XYZ.现在,当我使用cxf-codegen-plugin生成Java代码并使用自定义包名"com.qsrs.uvw"时,在生成的最终代码中只保留一个类.有人可以帮帮我吗?
我希望将此API与ac#应用程序一起使用:http: //www.affjet.com/2012/11/26/4-4-affjet-api/#more-3099
在将wsdl添加到我的projcet后,我写了这个简单的代码:(getTransactions获取一个对象[] @params并返回一个字符串)
Ws_ApiService service = new Ws_ApiService();
string apiKey = "*************";
var response = service.getTransactions(new object[] { apiKey });
Run Code Online (Sandbox Code Playgroud)
我尝试了几种方法,但无法得到正确的答案,我试过:
var response = service.getTransactions(new object[] { "apiKey:****"});
Run Code Online (Sandbox Code Playgroud)
和
var response = service.getTransactions(new object[] { "apiKey","******"});
Run Code Online (Sandbox Code Playgroud)
这是从他们的文档中做同样的PHP代码:
<?php
$nameSpace = "https://secure.affjet.com/ws/api";
//Creating AffJet client for SOAP
$client = new SoapClient($nameSpace."?wsdl");
$pageNumber = 0;
//Setting up parameters
$params = array();
$params["apiKey"] = "MY_API_KEY";
//Value for parameters (optional)
//$params["networkId"] = array(1,2);
//$params["pageNumber"] = 0;
//$params["pageSize"] = 10;
//Making Request …Run Code Online (Sandbox Code Playgroud) 我有一个带可选标头的wsdl:
<s:element name="AuthIdentifier" type="tns:AuthIdentifier"/>
<s:complexType name="AuthIdentifier">
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="identifier" type="s:string"/>
</s:sequence>
<s:anyAttribute/>
</s:complexType>
Run Code Online (Sandbox Code Playgroud)
客户端使用集成软件 (tibco)连接到我的服务并声称标头是必需的,因此他必须使用空值发送它:
<Header.AuthIdentifier>
<ns0:AuthIdentifier xmlns:ns0 = "http://www.tal.com/schemas"/>
</Header.AuthIdentifier>
Run Code Online (Sandbox Code Playgroud)
如何使其成为可选项?这样他就不必发送整个标题了?有没有这样的minOccurs东西?或者它现在已经是可选的吗?