开发环境:
1、我方:jdk1.6 + myeclipse8.5 + JAX-WS(目前服务端和客户端代码都是依靠myeclipse自动生成的)
2、客户方:.NET
3、双方都要开发webservice服务端供对方调用,也要开发客户端调用对方的服务。客户的要求
1、调用任何一个服务方法之前必须使用SoapHeader进行验证,结构如下:
Public class MySoapHeader: SoapHeader
{
public string Username;
public string Password;
}
2、调用任何一个服务方法之后使用SoapHeader返回执行结果,结构如下:
Public class ReturnHeader: SoapHeader
{
public int ReturnCode;//0 操作成功 -1 验证失败 -2 操作失败
public string Msg;//调用结果说明
}下面是我定义的服务类(java):
@WebService
public class MyWebServiceImpl{
//客户端调用传过来的验证信息(从soapHeader中取出)
public MySoapHeader mySoapHeader;
//调用处理结束后返回给客户端的信息(从soapHeader中返回)
public ReturnHeader returnHeader; //客户端调用的主业务方法,实际参数和返回值比这里复杂,这里只是举个例子。
public String getUserName(String userId){
String userName = "";
returnHeader = new ReturnHeader();
//1.在这里如何接收调用方soapHeader中传过来的mySoapHeader?
if(mySoapHeader.getLoginID().equals("tom") && mySoapHeader.getPassword().equals("psd")){
//验证通过,处理业务代码
userName = "Jack";
returnHeader.setReturnCode(0);
returnHeader.setMsg("操作成功!");
}else{
returnHeader.setReturnCode(-1);
returnHeader.setMsg("验证失败!");
}
//2.在这里如何返回消息soapHeader中增加 ReturnHeader?
return userName;
}
}问题1:
对于服务端,我应该如何处理才能从soapHeader中得到MySoapHeader,也不知道如何将ReturnHeader封装到soapHeader中并返回。问题2:
对于客户端,我使用客户提供给我的wsdl地址通过myeclipse的JAX-WS自动生成了java代码,其中看到了业务调用主类和MySoapHeader类、ReturnHeader类,
但是现在我不知道如何在调用对方服务方法时通过soapHeader传入MySoapHeader,也不知道怎样从调用返回结果的soapHeader中得到ReturnHeader。问题3:
在服务端,如何封装服务方法中自定义类型参数和自定义返回值,比如参数是一个自定义类UserInfo,或者返回一个UserInfo。希望有经验的朋友能给我一些实际的提示,因为只是刚刚接触webservice,很多概念只是刚了解,更不知道如何通过myeclipse灵活的驾驭JAX-WS。
可加我QQ(6530090)直接聊,如果你希望得到有偿服务,可以在QQ里和我详谈,谢谢!
1、我方:jdk1.6 + myeclipse8.5 + JAX-WS(目前服务端和客户端代码都是依靠myeclipse自动生成的)
2、客户方:.NET
3、双方都要开发webservice服务端供对方调用,也要开发客户端调用对方的服务。客户的要求
1、调用任何一个服务方法之前必须使用SoapHeader进行验证,结构如下:
Public class MySoapHeader: SoapHeader
{
public string Username;
public string Password;
}
2、调用任何一个服务方法之后使用SoapHeader返回执行结果,结构如下:
Public class ReturnHeader: SoapHeader
{
public int ReturnCode;//0 操作成功 -1 验证失败 -2 操作失败
public string Msg;//调用结果说明
}下面是我定义的服务类(java):
@WebService
public class MyWebServiceImpl{
//客户端调用传过来的验证信息(从soapHeader中取出)
public MySoapHeader mySoapHeader;
//调用处理结束后返回给客户端的信息(从soapHeader中返回)
public ReturnHeader returnHeader; //客户端调用的主业务方法,实际参数和返回值比这里复杂,这里只是举个例子。
public String getUserName(String userId){
String userName = "";
returnHeader = new ReturnHeader();
//1.在这里如何接收调用方soapHeader中传过来的mySoapHeader?
if(mySoapHeader.getLoginID().equals("tom") && mySoapHeader.getPassword().equals("psd")){
//验证通过,处理业务代码
userName = "Jack";
returnHeader.setReturnCode(0);
returnHeader.setMsg("操作成功!");
}else{
returnHeader.setReturnCode(-1);
returnHeader.setMsg("验证失败!");
}
//2.在这里如何返回消息soapHeader中增加 ReturnHeader?
return userName;
}
}问题1:
对于服务端,我应该如何处理才能从soapHeader中得到MySoapHeader,也不知道如何将ReturnHeader封装到soapHeader中并返回。问题2:
对于客户端,我使用客户提供给我的wsdl地址通过myeclipse的JAX-WS自动生成了java代码,其中看到了业务调用主类和MySoapHeader类、ReturnHeader类,
但是现在我不知道如何在调用对方服务方法时通过soapHeader传入MySoapHeader,也不知道怎样从调用返回结果的soapHeader中得到ReturnHeader。问题3:
在服务端,如何封装服务方法中自定义类型参数和自定义返回值,比如参数是一个自定义类UserInfo,或者返回一个UserInfo。希望有经验的朋友能给我一些实际的提示,因为只是刚刚接触webservice,很多概念只是刚了解,更不知道如何通过myeclipse灵活的驾驭JAX-WS。
可加我QQ(6530090)直接聊,如果你希望得到有偿服务,可以在QQ里和我详谈,谢谢!
{
public string Username;
public string Password;
} [WebService(Namespace = "http://www.rainsts.net/ ", Description= "我的Web服务 ")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class WebService : System.Web.Services.WebService
{
public MyHeader my; [WebMethod]
[SoapHeader( "my ", Direction = SoapHeaderDirection.In)]
public void TestSoapHeadIn()
{
System.Diagnostics.Debug.Write(my.Username);
System.Diagnostics.Debug.Write(my.Password);
}
}
如果要改变方向,只需Direction = SoapHeaderDirection.Out但是,在java怎么做,没有人知道吗?
就像这样:[SoapHeader( "my ", Direction = SoapHeaderDirection.In)]
谢谢!
我知道可以在调用方法中增加参数用@WebParam(mode=OUT\IN,header=true) 来传递头参数,但客户那边要求头是单独传输的,不是在每个方法中增加头参数。
2.WebService不是高效的调用方式,如果要采用,建议使用CXF
3.如果Http restful模式,建议采用HttpClientCXF Java 调用.net webService例子//net调用方式
//@WebService(targetNamespace = "http://tempuri.org/",serviceName="wfs",portName="wfsSoap12")
@WebService(targetNamespace = "http://tempuri.org/",serviceName="wfs")
public interface NetHW {
@WebMethod(operationName="HelloWorld")
String HelloWorld(
@WebParam(name = "instr") String instr,
@WebParam(name = "test") int test);
}JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(NetHW.class);
factory.setAddress(serviceURL);
factory.setWsdlURL(serviceURL+"?wsdl");
factory.setServiceName(new QName("http://tempuri.org/","wfs"));
factory.getServiceFactory().setDataBinding(new AegisDatabinding());
NetHW client = (NetHW) factory.create();
str = client.HelloWorld("测试", 1);
client=null;
factory = null;