我已经使用 JAX-WS 创建了 Web 服务。当我访问 Web 服务时,得到以下响应:
<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"><faultcode>S:Client</faultcode><faultstring>Couldn't create SOAP message due to exception: XML reader error: com.ctc.wstx.exc.WstxParsingException: Undeclared namespace prefix "ws"
at [row,col {unknown-source}]: [1,169]</faultstring></S:Fault></S:Body></S:Envelope>
我的网络服务是:
@WebService
public interface HelloService {
@WebMethod
String Hello(@WebParam(name = "name")String msg);
}
public class HelloServiceIml implements HelloService {
@Override
String Hello(String msg){
return "Hello" + msg;
}
}
public class Mainws {
/**
* @param args
*/
public static void main(String[] args) {
Endpoint.publish("http://localhost:8085/hello", new HelloServiceIml());
}
}
客户计划:
public class PostSoap {
public static void main(String[] args) throws Exception {
// Get target URL
String strURL = "http://localhost:8085/HelloService";
// Get SOAP action
String strSoapAction = "SOAPAction";
// Get file to be posted
String strXML = "<?xml version=\"1.0\" encoding=\"windows-1251\"?> " +
"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> " +
"<soapenv:Header/> " +
"<soapenv:Body> <ws:Hello> " +
" <name>John</name> " +
" </ws:Hello> </soapenv:Body> </soapenv:Envelope> ";
// Prepare HTTP post
PostMethod post = new PostMethod(strURL);
post.setRequestBody(strXML);
post.setRequestHeader("Content-Type", "text/xml");
// consult documentation for your web service
post.setRequestHeader("SOAPAction", strSoapAction);
// Get HTTP client
HttpClient httpclient = new HttpClient();
httpclient.getParams().setAuthenticationPreemptive(true);
httpclient.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user", "pwd"));
// Execute request
try {
int result = httpclient.executeMethod(post);
// Display status code
System.out.println("Response status code: " + result);
// Display response
System.out.println("Response body: ");
System.out.println(post.getResponseBodyAsString());
} finally {
// Release current connection to the connection pool once you are done
post.releaseConnection();
}
}
}
请帮我解决问题。