我正在读一本关于 Java 和 Web 服务的书,但我陷入了本书的第一个示例。看看这些代码,请告诉我您将如何运行这些类以及如何或在哪里保存它们。无需使用任何 IDE!
时间服务器类
package web.ts; // time server
import javax.jws.WebService;
import javax.jws.WebMethod;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
/**
* The annotation @WebService signals that this is the
* SEI (Service Endpoint Interface). @WebMethod signals
* that each method is a service operation.
*
* The @SOAPBinding annotation impacts the under-the-hood
* construction of the service contract, the WSDL
* (Web Services Definition Language) document. Style.RPC
* simplifies the contract and makes deployment easier.
*/
@WebService
@SOAPBinding(style = Style.RPC) // more on this later
public interface TimeServer {
@WebMethod String getTimeAsString();
@WebMethod long getTimeAsElapsed();
}
时间服务器Impl 打包 web.ts;
import java.util.Date;
import javax.jws.WebService;
/**
* The @WebService property endpointInterface links the
* SIB (this class) to the SEI (ch01.ts.TimeServer).
* Note that the method implementations are not annotated
* as @WebMethods.
*/
@WebService(endpointInterface = "ch01.ts.TimeServer")
public class TimeServerImpl implements TimeServer {
public String getTimeAsString() { return new Date().toString(); }
public long getTimeAsElapsed() { return new Date().getTime(); }
}
然后是最后一堂课 时间服务器发布者 打包 web.ts;
import javax.xml.ws.Endpoint;
/**
* This application publishes the web service whose
* SIB is ch01.ts.TimeServerImpl. For now, the
* service is published at network address 127.0.0.1.,
* which is localhost, and at port number 9876, as this
* port is likely available on any desktop machine. The
* publication path is /ts, an arbitrary name.
*
* The Endpoint class has an overloaded publish method.
* In this two-argument version, the first argument is the
* publication URL as a string and the second argument is
* an instance of the service SIB, in this case
* ch01.ts.TimeServerImpl.
*
* The application runs indefinitely, awaiting service requests.
* It needs to be terminated at the command prompt with control-C
* or the equivalent.
*
* Once the applicatation is started, open a browser to the URL
*
* http://127.0.0.1:9876/ts?wsdl
*
* to view the service contract, the WSDL document. This is an
* easy test to determine whether the service has deployed
* successfully. If the test succeeds, a client then can be
* executed against the service.
*/
public class TimeServerPublisher {
public static void main(String[ ] args) {
// 1st argument is the publication URL
// 2nd argument is an SIB instance
Endpoint.publish("http://127.0.0.1:9876/ts", new TimeServerImpl());
}
}
我知道如何编译它们。但是当我尝试运行发布者时出了问题。
我保存它们的方式是在一个名为 Web/ts/“这里是三个类”的文件夹中
据我所知,接口文件和 impl 文件可以位于不同的文件夹中(在 src 文件夹下),但接口文件的 @WebService(endpointInterface = "ch01.ts.TimeServer") 路径应该正确显示。一旦此路径正确,就会进行发布并生成 wsdl。
如果您想学习 Web 服务,我建议您下载现有框架,例如 Apache CXF 或 Apache axis2。它们包括许多可以编译和运行的示例。这些示例很容易理解,您从一开始就会得到一些有用的东西。 它们还为您提供了相当好的项目结构,因此您知道在哪里放置 xml 和 wsdl 文件等。
是的,您不需要 IDE 来运行它们。根据我的经验,最好不使用 IDE 开始,这样您就可以确切地知道发生了什么。 IDE 将提高您以后的工作效率。